我创建了一个自定义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");
}
它正在运行,但我已经读过,不应该覆盖此方法。
答案 0 :(得分:2)
当您致电cancelAllOperations
时,已启动的操作会将isCancelled
设置为YES
。尚未开始的操作不会开始。