我有各种操作(源自 NSOperation)来通过 Internet 进行异步查询。按照惯例,我通过观察它们的 isFinished 属性来确定它们何时完成。
当一种特定类型的操作完成时,我想使用第一个的信息创建一个后续类型的操作。但是当我这样做时,在操作上调用 addObserver 会使我的应用程序因访问错误而崩溃。由于观察者是在随机线程中调用的,所以我尝试创建后续操作并将观察者设置在主线程上。没有不同。这是在 observeValueForKeyPath 中完成的:
GetMessagesOperation* msgOp =
[[GetMessagesOperation alloc] initWithUserID:_user.getID()
sinceLast:true
includeSystem:true
includeUser:false
skipRows:0
maxCount:50
DBManager:_pDatabaseMgr];
[msgOp addObserver:self
forKeyPath:@"isFinished"
options:0
context:getMessageContext];
[_operationQueue addOperation:msgOp];
[msgOp release];
上下文是字符串的 void*;我对许多其他可以正常工作的操作使用相同的语法。以下是上下文的定义方式:
static void* systemInfoContext = (void*)@"sys";
static void* validateUserContext = (void*)@"user";
static void* getMessageContext = (void*)@"msg";
有人在这里猜吗?谢谢!
编辑:感谢您的回复。没有生成崩溃日志。它只是在 addObserver 行上出现错误访问而退出,无论我是在主线程还是输入了 observeValueForKeyPath 的后台线程上执行,都会发生这种情况。