NSOperation访问isCancelled in main

时间:2014-10-29 09:59:59

标签: ios objective-c xcode nsoperation

当前状态

我创建了一个自定义NSOperation对象,我希望在取消时更新一些数据。

我已按照this answer中的内容进行操作,而覆盖cancel方法。

这是我的标题:

// MyOperation.h
@interface MyOperation : NSOperation {
}
@property (nonatomic, retain) OtherDataClass *dataClass;
@end

实施

// MyOperation.m
@implementation MyOperation

@synthesize dataClass;

- (void)main {
    if ([self isCancelled]) {

        [self.dataClass setStatusCanceled];

        NSLog(@"Operation cancelled");
    }

    // Do some work here
    NSLog(@"Working... working....")

    [self.dataClass setStatusFinished];

    NSLog(@"Operation finished");
}

@end

问题

我在队列中有几个操作。我期待着,当我在队列中调用cancelAllOperations时,我将在日志中获取“操作已取消”文本,并且状态在我的其他课程中更新但是它不起作用。没有为队列中的操作调用main方法。

为什么会发生这种情况,我该如何解决?

备注

我试图用这个覆盖cancel方法:

- (void)cancel {
    [super cancel];
    [self.dataClass setStatusCanceled];
    NSLog(@"Operation cancelled");
}

它正在运行,但我已经读过,不应该覆盖此方法。

1 个答案:

答案 0 :(得分:2)

当您致电cancelAllOperations时,已启动的操作会将isCancelled设置为YES。尚未开始的操作不会开始。