gpt4 book ai didi

core-data - 尝试使用 NSFetchedResultsController 创建 USE_BLOCK_IN_FRAME ... EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-12-04 12:56:10 24 4
gpt4 key购买 nike

这是我的问题的更新。当程序中止时,我现在收到此警告。
警告:尝试使用不在框架中的块创建 USE_BLOCK_IN_FRAME 变量。

我找不到关于这意味着什么的太多信息。

这让我很困惑。我收到 EXC_BAD_ACCESS 错误。我有 NSZombieEneabled(这有助于解决早期的问题),但没有要跟踪的调用堆栈。

我有一些几乎相同的代码,它们与另一个获取的结果 Controller 相关。

这似乎与工作实体与其关联的客户实体之间的关系有关。关系是[工作实体] <<--> [客户实体]。

最初,我看到代码可以正常工作,其中与所选行对应的作业实体没有通过关系链接的客户端实体。所以在失败的情况下,this指向一个客户端实体,但当它没有失败时,指针为零。

当我遇到这个问题时,我启动应用程序并直接进入作业选择器 View 并选择一个单元格。正是在这一点上,问题出现了。

我做了一个实验,首先启动应用程序并转到客户端选择器 View ,知道所有客户端实体都会发生提取。然后我转到工作选择器 View 并选择了一个单元格。问题没有发生。

由于我只是想将指针传递给已经获取的作业实体,因此我不明白发生了什么。

顺便说一句,在我切换到使用 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 来跟踪用户所做的事情。所以我将 last selectedJob 和 selectedClient 实体指针保留在那里。在我切换到 NSFetchedResultsController 之前,这工作正常。

最佳答案

我也遇到了 的问题尝试使用不在框架中的块创建 USE_BLOCK_IN_FRAME 变量 .虽然我的与 NSFetchedResultsControllers 没有任何关系。

可能是你的问题

我注意到您提到您使用的是单例,所以也许您的问题已在此链接中解决:

http://npenkov.com/2011/08/01/solving-issues-like-warning-attempting-to-create-use_block_in_frame-variable-with-block-that-isnt-in-the-frame/

从链接:

Exactly in session manager I used the macro, before @synthesize – this was the problem, static definitions should not appear before synthesized methods. So if you have something like:


SYNTHESIZE_SINGLETON_FOR_CLASS(SessionManager)
@synthesize loggedUserId, ...

Just replace it with:


@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)移动到循环之后解决了问题。在我的生产代码中,我更改了其中一个变量的名称。

希望对您或遇到此问题的其他人有所帮助。这个错误似乎以许多不同的方式表现出来。

关于core-data - 尝试使用 NSFetchedResultsController 创建 USE_BLOCK_IN_FRAME ... EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5922657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com