这是我的问题的更新。当程序中止时,我现在收到此警告。 警告:尝试使用不在框架中的块创建 USE_BLOCK_IN_FRAME 变量。
我找不到太多关于这意味着什么的信息。
这让我很困惑。我收到 EXC_BAD_ACCESS 错误。我有 NSZombieEneabled (这有助于解决早期的问题),但没有调用堆栈可跟踪。
我有一些几乎相同的代码可以用于另一个获取的结果控制器。
这似乎与工作实体与其关联的客户实体之间的关系有关。关系是 [工作实体] <<--> [客户实体]。
最初,我看到代码可以正常工作,其中与所选行对应的作业实体没有通过关系链接的客户端实体。所以在失败的情况下, this 指向一个客户端实体,但是当它没有失败时,指针为 nil。
当我遇到这个问题时,我启动应用程序并直接进入作业选择器视图并选择一个单元格。正是在这一点上出现了问题。
我通过启动应用程序并首先进入客户端选择器视图进行了一个实验,知道所有客户端实体都会发生提取。然后我转到作业选择器视图并选择了一个单元格。问题没有发生。
由于我只是想将指针传递给已经获取的作业实体,所以我不明白发生了什么。
顺便说一句,在我改用 NSFetchedResultsControllers 之前,代码运行良好。我喜欢他们可以为我做的事情,但是这里有一些我还没有弄清楚的动态。
日志记录没有向我展示我对解决问题的理解。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
userState.selectedJob = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"\n\n(1 Pick) indexPath: %@\n",indexPath);
NSLog(@"\n\n(1 Pick) userState: %@\n",userState);
NSLog(@"\n\nnumber of Objects in job fetchresultscontroller = %d", [[fetchedResultsController fetchedObjects] count] );
NSLog(@"\n\n(1 Pick) selected job: %@\n",[self.fetchedResultsController objectAtIndexPath:indexPath]); // This line is causing the problem...
NSLog(@"\n\n(1 Pick) selected job: %@\n",userState.selectedJob); // Omitting the line above, this line fails
[self.navigationController pushViewController:userState.jobInfoTVC animated:YES];
}
调试输出是
2011-05-07 09:27:04.142 job1[6069:207]
(1 Pick) indexPath: <NSIndexPath 0x5952590> 2 indexes [0, 3]
2011-05-07 09:27:04.142 job1[6069:207]
(1 Pick) userState: <UserStateObject: 0x5919970>
2011-05-07 09:27:04.143 job1[6069:207]
number of Objects in job fetchresultscontroller = 4
(gdb)
最终的代码应该像这样简单,这导致了我所有的日志记录:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
userState.selectedJob = [self.fetchedResultsController objectAtIndexPath:indexPath]; // Original failure was at this line
[self.navigationController pushViewController:userState.jobInfoTVC animated:YES];
}
我使用单例 userState 来跟踪用户所做的事情。所以我把最后一个 selectedJob 和 selectedClient 实体指针保留在那里。在我切换到 NSFetchedResultsController 之前,这一切正常。