gpt4 book ai didi

ios - executeFetchRequest:错误:在主线程上卡住

转载 作者:行者123 更新时间:2023-12-01 16:49:53 46 4
gpt4 key购买 nike

必须在创建该线程的同一线程中使用AFAIK ManagedObjectContext,否则可能由于锁定而冻结。

我遇到的情况是尝试在主线程中创建executeFetchRequest:error:时被锁定,其中我的ManagedObjectContext首先创建(我看到该调用实际上出现在主线程中,因为在应用尝试恢复后我收到了崩溃报告从后台-“[APPNAME]无法及时恢复”)。

那真是怪了。我不了解是什么原因锁住了我的MOC(我可以在前面提到的崩溃报告中看到其他线程调用跟踪,并且它们中没有像CoreData这样的东西),我真的很想知道是什么可能导致这种情况以及如何调试它。

顺便说一下,这种情况很少发生。经过一些可能解决问题的更改后,我不知道结果,直到再次发生。真令人沮丧。

有人可以帮我解决这个问题吗?

更新:

这是一些代码(尽管我真的怀疑这实际上是否有助于理解问题)

- (NSArray *)existingIncomeInvites
{
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Profile"];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"connectionRequestDidReceive = YES"]];

return [self.dataModel.managedObjectContext executeFetchRequest:fetchRequest error:nil];
}

应用在最后一行冻结

这是其他一些代码
- (NSManagedObjectContext *)managedObjectContext
{
if (![NSThread isMainThread])
{
LOG(@"Trying to get MOC on main thread!");
}

if (_managedObjectContext != nil) {
return _managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}

- (void)showBadgeOnButton
{
NSArray *incomeInvites = [self.dataModel.profileManager existingIncomeInvites];

...
}

然后从我的 showBadgeOnButton中调用 - (void)viewWillAppear:(BOOL)animated
我最近更改的是这个-@“connectionRequestDidReceive = YES”以前是@“connectionRequestDidReceive == YES”,但我认为这没有什么区别...

最佳答案

我自己找到了答案。
显然,我以一种不太明显的方式使用persistentStoreCoordinator-在出现故障时访问数据。我什至不知道我的ManagedObjects实际上是错误。我在后台线程中进行了访问。所以那件事使我非常痛苦。

希望对别人有帮助。

关于ios - executeFetchRequest:错误:在主线程上卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16980151/

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