Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
无法从iOS6中的后台线程调用主线程上的代码_Ios_Multithreading_Ios6_Nsmanagedobjectcontext - Fatal编程技术网

无法从iOS6中的后台线程调用主线程上的代码

无法从iOS6中的后台线程调用主线程上的代码,ios,multithreading,ios6,nsmanagedobjectcontext,Ios,Multithreading,Ios6,Nsmanagedobjectcontext,在后台线程上保存托管对象上下文时,我正在侦听NSManagedObjectContextDidSaveNotification并尝试在主线程上合并它 但是,当我尝试将请求转发到主线程时,没有一个代码使用 [self performSelectorOnMainThread:@selector(executeThisCode:) withObject:saveNotification waitUntilDone:NO]; 也没有 dispatch_async(dispatch_get_main_

在后台线程上保存托管对象上下文时,我正在侦听NSManagedObjectContextDidSaveNotification并尝试在主线程上合并它

但是,当我尝试将请求转发到主线程时,没有一个代码使用

[self performSelectorOnMainThread:@selector(executeThisCode:) withObject:saveNotification waitUntilDone:NO]; 
也没有

dispatch_async(dispatch_get_main_queue(), ^{
    ...execute this code
});

奇怪的是,iOS 5.1和iOS 5.0都可以正常工作,但iOS 6却不行。有什么想法吗

您是否首先检查您是否已经在主线程中?如果调用
performSelectorOnMainThread
时,
executeThisCode
是当前正在执行的方法的选择器,则这一点尤其重要。大概是这样的:

- (void) executeThisCode: (NSNotification*) notification{
    if (![NSThread isMainThread]) {
       [self performSelectorOnMainThread:@selector(executeThisCode:) 
                                 withObject:notification 
                              waitUntilDone:YES];
       return;
    }

    // merge logic goes here and executes on the main thread
}

你能试试Waituntone吗?是的?我注意到你把它设为“否”。