对于iPhone应用程序,我使用NSOperationQueue将SQLite数据库的访问限制为一次一个查询。我创建了NSOperation的子类,在main函数中我有以下内容:
- (void)main
{
// ... other code here ...
if( [_delegate respondsToSelector:@selector(queryCompleted:)] )
{
[_delegate performSelectorOnMainThread:@selector(queryCompleted:)
withObject:self
waitUntilDone:NO];
}
}
代表方:
- (void)queryCompleted:(QueryOperation*)aQueryOperation
{
// Breakpoint here allows me to explore and see the members of aQueryOperation
id results = [aQueryOperation resultSet]; // Crashes here
// ... more code here ...
}
我传递self
的原因是允许委托访问查询操作的ID(在每个代理打开多个请求的情况下)和查询结果。
在performSelectorOnMainThread:withObject:waitUntilDone:
的文档中,它明确指出:
“此方法保留接收器和arg参数,直到执行选择器之后。”
但是,当委托方法尝试访问参数时,会抛出“EXC_BAD_ACCESS”异常。有什么想法吗?
奇怪的是,如果我在对NSOperation对象的崩溃引用之前设置了一个断点,那么调试器允许我查看对象实例和所有参数的值。
答案 0 :(得分:0)
尝试将waitUntilDone:参数设置为YES。可能存在一种竞争条件,即允许NSOperation解除分配。