为什么addObserver会立即崩溃?

时间:2012-01-14 06:32:11

标签: iphone ios nsoperation addobserver

我有各种操作(源自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,都会发生这种情况。

1 个答案:

答案 0 :(得分:0)

BAH!整个问题是在操作的初始化方法中没有调用[super init]。

感谢所有回答的人。