Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios executeFetchRequest:错误:在主线程上冻结_Ios_Objective C_Core Data - Fatal编程技术网

Ios executeFetchRequest:错误:在主线程上冻结

Ios executeFetchRequest:错误:在主线程上冻结,ios,objective-c,core-data,Ios,Objective C,Core Data,AFAIKManagedObjectContext必须在创建它的同一线程中使用,否则它可能会因为锁定而被冻结 当我尝试在主线程中执行executeFetchRequest:error:时,我遇到了锁定的情况,在主线程中,我的ManagedObjectContext首先被创建(我可以看到调用实际上出现在主线程中,因为我在应用程序尝试从后台恢复后有一个崩溃报告-“[APPNAME]未能及时恢复”) 真奇怪。我不明白是什么锁定了我的MOC(我可以在前面提到的崩溃报告中看到其他线程调用跟踪,它们中没有类

AFAIK
ManagedObjectContext
必须在创建它的同一线程中使用,否则它可能会因为锁定而被冻结

当我尝试在主线程中执行
executeFetchRequest:error:
时,我遇到了锁定的情况,在主线程中,我的
ManagedObjectContext
首先被创建(我可以看到调用实际上出现在主线程中,因为我在应用程序尝试从后台恢复后有一个崩溃报告-“[APPNAME]未能及时恢复”)

真奇怪。我不明白是什么锁定了我的MOC(我可以在前面提到的崩溃报告中看到其他线程调用跟踪,它们中没有类似的
CoreData
),我真的想知道这可能是什么原因,以及如何调试它

顺便说一下,这种情况很少发生。在一些可能解决问题的改变之后,我不知道结果,直到它再次发生。这太令人沮丧了

有人能帮我解决这个问题吗

更新:

下面是一些代码(尽管我真的怀疑它是否有助于理解这个问题)

应用程序在最后一行冻结

下面是一些其他代码

- (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];

    ...
}
并且从我的
-(void)视图调用
showBadgeOnButton
,将显示:(BOOL)动画


我最近改变的是-@“connectionRequestDidReceive=YES”之前是“connectionRequestDidReceive==YES”,但我认为这不会有任何区别…

我自己找到了答案。 显然,我使用persistentStoreCoordinator的方式并不明显——在故障中访问数据。我甚至不知道我的管理目标实际上是错误的。我在后台线程中进行了访问。这就是让我如此痛苦的原因


希望这会对某人有所帮助。

我们能看一些代码吗?你在哪里调用它?@Dev2rights,我更新了我的问题。当然,但我试图看看你在哪里调用executeFetchRequest:error:好像这是在UI未加载的地方,例如,它会导致挂起。@Dev2rights,“UI未加载”是什么意思?正如我在更新中提到的,所有这些调用堆栈都是从
-(void)视图调用的,将显示:(BOOL)动画
,因此我猜此时所有内容都已加载。如果您得到“未能及时恢复”,通常是因为您的
didFinishLaunchingWithOptions
花费的时间太长而无法返回。
- (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];

    ...
}