微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NSOperationQueue无法在IOS5中运行

我有一个项目,使用NSOperationQueue在后台下载图像.它一直在使用 IOS 4.3的设备上工作.但是,如果我使用基本sdk 4.3或5构建应用程序并使用IOS5在设备上运行应用程序,则应用程序崩溃.启动应用程序时,它会将NSOperation对象添加到队列中以下载图像.如果在我之间按下后退按钮,我取消NSOperation并且它崩溃并在控制台上显示以下跟踪:
#0  0x004727b7 in ____NSOQSchedule_block_invoke_0 ()
#1  0x026a5618 in _dispatch_call_block_and_release ()
#2  0x026a7a10 in _dispatch_worker_thread2 ()
#3  0x974bb781 in _pthread_wqthread ()
#4  0x974bb5c6 in start_wqthread ()

并打印“ResourceLoadOperation isFinished = YES,而不是由它所在的队列启动”
如果我评论取消方法调用,应用程序不会崩溃.
IOS5的NSOperation更改是否有任何更新?

解决方法

我在构建iOS 5时遇到了同样的问题.我最终创建了一个名为operationStarted的标志,认情况下为NO,并且在调用start方法时切换为YES.然后在我的完成方法(我生成KVO通知)中,我在触发通知之前检查了标志的值.

标志定义如下所示:

@property (nonatomic,assign,getter=isOperationStarted) BOOL operationStarted;

启动方法

- (void)start {
    [self setoperationStarted:YES];
    ...
}

操作完成或取消时调用的完成方法

- (void)finish {    
    if (![self isOperationStarted]) return;

    [self willChangeValueForKey:@"isExecuting"];
    executing = NO;
    [self didChangeValueForKey:@"isExecuting"];

    [self willChangeValueForKey:@"isFinished"];
    finished = YES;
    [self didChangeValueForKey:@"isFinished"];
}

最终为我解决了这个问题.希望它可以帮助别人.

原文地址:https://www.jb51.cc/iOS/331682.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐