2014-04-11 51 views
1

嗨,我使用Xcode 5+和iOS 7+,并实现NSOperationQueue。我创建了一个NSOpeartion的子类,并说我有50 +操作添加到NSOperationQueue。 isExecuting和isFinished被覆盖在NSOperation`s启动方法 -NSOperation完成后,不从NSOperationQueue中删除?

-(void)start{ 

    // soeme code is here 

    [self willChangeValueForKey:@"isExecuting"]; 
    _isExecuting = YES; 
    [self didChangeValueForKey:@"isExecuting"]; 

    [self willChangeValueForKey:@"isFinished"]; 
    _ isFinished = NO; 
    [self didChangeValueForKey:@"isFinished"]; 
} 

和完成任务后,我编写此代码

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

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

MaxConcurrentOperationCount为2但2操作下一个(第三操作)完成之后没有按不会执行主要方法。请给我一些关于何时出现这个问题的说明。

感谢

+0

上述代码是否为您的项目?你没有设置_isFinished ... – Volker

+0

谢谢,这是我的错误,我编辑了上面的代码。 –

回答

3

在启动时,你应该设置isExecutingYES但你不应该设置isFinished可言,特别是不要YES

当你的异步操作完成后,您需要设置isExecutingNO,不YES,你需要设置isFinishedYES但要设置一个isExecuting第二次。

+0

谢谢,现在在更新NSOperation的main代码后,我设置了isExecuting = NO,isFinished = NO,并且当操作完成后,我设置了isExecuting = NO,isFinished = YES。所以请告诉您这里会出现什么问题, –

+0

您需要在操作开始时将'isExecuting'设置为'YES'。 – rmaddy

相关问题