这是我的问题的更新。程序中止时我现在收到此警告。 警告:尝试使用不在框架中的块创建USE_BLOCK_IN_FRAME变量。
我找不到很多关于这意味着什么的信息。
这令我感到困惑。我收到EXC_BAD_ACCESS错误。我有NSZombieEneabled(它帮助解决了早期的问题),但是没有要跟踪的调用堆栈。
我有一些几乎相同的代码,它与另一个获取的结果控制器有关。
这似乎与作业实体及其关联的客户实体之间的关系有关。该关系是[工作实体]<< - > [客户实体]。
最初,我看到代码正常工作,其中与所选行对应的作业实体没有通过关系链接的客户端实体。因此,在失败的情况下,这指向客户端实体,但是当它没有失败时,指针为零。
当我遇到此问题时,我启动应用程序并直接进入作业选择器视图并选择一个单元格。就在那时,问题就出现了。
我做了一个实验,首先启动应用程序并转到客户端选择器视图,知道所有客户端实体都会进行提取。然后我去了工作选择器视图并选择了一个单元格。问题没有发生。
由于我只是尝试将指针传递给已经获取的作业实体,因此我不明白发生了什么。
顺便说一句,在我切换到使用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];
}
我使用singleton userState来跟踪用户的操作。所以我保留了最后的selectedJob和selectedClient实体指针。在我切换到NSFetchedResultsController之前,这个工作正常。
答案 0 :(得分:1)
我还遇到了尝试使用不在框架中的块创建USE_BLOCK_IN_FRAME变量的问题。虽然我和NSFetchedResultsControllers没什么关系。
我注意到你提到你正在使用单身人士,所以也许你的问题在这个链接上解决了:
从链接:
在会话管理器中我使用了宏,在@synthesize之前 - 这就是问题,静态定义不应该出现在合成方法之前。所以如果你有类似的东西:
SYNTHESIZE_SINGLETON_FOR_CLASS(SessionManager)
@synthesize loggedUserId, ...
只需将其替换为:
@synthesize loggedUserId, ...
SYNTHESIZE_SINGLETON_FOR_CLASS(SessionManager)
enter code here
我遇到的问题是复制变量声明,在这种情况下是从NSManagedObject继承的变量:
- (void)functionThatDoesSomething {
VariableInheritedFromNSMObj *variableA = nil;
for (VariableInheritedFromNSMObj *variableA in [self containerObject]) {
NSLog(@"a = %@\n", [variableA name]);
}
[variableA setName:@"StackOverflow"];
}
将第一行(其中variableA初始化为nil)移动到循环后修复问题。在我的生产代码中,我随后更改了其中一个变量的名称。
希望能帮助您或遇到此问题的其他人。这个错误似乎以许多不同的方式表现出来。
答案 1 :(得分:0)
部署目标操作系统版本是否设置为低于Xcode 4.2中的调试支持?当发生这种情况时,部署目标已经以某种方式变为4.1,但我只有4.3模拟器而没有4.0-4.1的额外调试支持。
有办法解决这个问题:
如果您选择前者,则可能需要在首选项框中勾选以自动下载更新。