我有一个项目,使用后台下载图像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,而不是由它所在的队列启动"如果我评论取消方法调用,应用程序不会崩溃.NSOperationIOS5 的更改是否有任何更新?
RJ *_*old 12
我在构建iOS 5时遇到了同样的问题.我最终创建了一个名为默认的标志operationStarted,并在调用方法时NO切换到.然后在我的方法(我生成KVO通知)中,我在触发通知之前检查了标志的值.YESstartfinish
标志定义如下所示:
@property (nonatomic, assign, getter=isOperationStarted) BOOL operationStarted;
Run Code Online (Sandbox Code Playgroud)
该start方法:
- (void)start {
[self setOperationStarted:YES];
...
}
Run Code Online (Sandbox Code Playgroud)
我finish当操作完成或取消,这就是所谓的方法:
- (void)finish {
if (![self isOperationStarted]) return;
[self willChangeValueForKey:@"isExecuting"];
executing = NO;
[self didChangeValueForKey:@"isExecuting"];
[self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
}
Run Code Online (Sandbox Code Playgroud)
最终为我解决了这个问题.希望它可以帮助别人.
| 归档时间: |
|
| 查看次数: |
3640 次 |
| 最近记录: |