我正在使用 UITableView 来显示一些字符串消息,并且我使用 NSOperationQueue 来保存一个自定义的 NSOperation,它在后台线程中获取消息。成功获取一条消息后,自定义的 NSOperation 会通知 UITableView 控制器显示它。
如果我在加载所有消息后单击导航栏上的后退按钮以从 UITableView 切换到其他视图,则一切正常。但是,如果我在某些消息仍在加载时单击后退按钮,则会抛出 EXC_BAD_ACCESS。我检查了在自定义 NSOperation 使用performSelectorOnMainThread
方法通知 UITableView 控制器时发生的异常。听起来目标 UITableView 控制器在视图切换后并非无效,但我认为导航控制器将保存视图控制器实例。我可以知道如何解决这个问题吗?谢谢。
自定义操作在 UITableView 控制器中初始化,代码如下:
StatusMessageLoadingOperation *operation = [[StatusMessageLoadingOperation alloc]
initWithData:person
messageArray:cachedStatusMessages
target:self
action:@selector(didFinishStatusMessages:)];
[operationQueue addOperation:operation];
[operation release];
自定义的 NSOperation 类将使用以下代码更新 UITableView:
- (void)main{
for (int i = 0; i < [[person statusMessages] count]; i++) {
[target performSelectorOnMainThread:action withObject:messageArray waitUntilDone:NO];
}
}