Ios NSOperation内的ASINetworkQueue保存核心数据时出错

Ios NSOperation内的ASINetworkQueue保存核心数据时出错,ios,asihttprequest,nsoperation,nsoperationqueue,Ios,Asihttprequest,Nsoperation,Nsoperationqueue,我想在NSO操作中使用ASINetworkQueue。这很有效,没有问题。失败的是保存核心数据。我为这个操作设置了一个新的NSManagedObjectContext,就像文档中告诉我的那样 我认为问题在于,当ASINetworkQueue完成并调用委托选择器时,我保存了数据。因为委托是在主线程上调用的,所以保存消息失败 这可能是问题所在,有人有解决方案吗?您正在正确地使用PerformSelectorOnMainThread方法合并来自新实例化ManagedObjectContext的更改 我

我想在NSO操作中使用ASINetworkQueue。这很有效,没有问题。失败的是保存核心数据。我为这个操作设置了一个新的NSManagedObjectContext,就像文档中告诉我的那样

我认为问题在于,当ASINetworkQueue完成并调用委托选择器时,我保存了数据。因为委托是在主线程上调用的,所以保存消息失败


这可能是问题所在,有人有解决方案吗?

您正在正确地使用PerformSelectorOnMainThread方法合并来自新实例化ManagedObjectContext的更改

我在我的操作中执行类似操作ctx是我的实例化MOC:

首次登记通知:

// Register context with the notification center
        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 

        [nc addObserver:self
               selector:@selector(mergeChanges:) 
                   name:NSManagedObjectContextDidSaveNotification
                 object:ctx];
然后,当您需要保存上下文时:

if ([ctx hasChanges]) {
            error = nil;

            // Save the context.
            if (![ctx save:&error])
            {
                // Do something with the error
            }

            // Clear out the scratchpad
            [ctx reset];

        }
然后是与主主主运行中心合并的方法:

- (void)mergeChanges:(NSNotification *)notification
{
    id appDelegate = [[UIApplication sharedApplication] delegate];  

    NSManagedObjectContext *mainContext = [appDelegate managedObjectContext];
    // Merge changes into the main context on the main thread
    [mainContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
                                  withObject:notification
                               waitUntilDone:NO];
    // NSLog(@"Merged Changes");
}

希望这有帮助

是的,我使用它,但我认为它崩溃了,因为委托是在主线程上调用的,所以如果我保存单独创建的上下文,我会收到一个错误,因为它没有保存在单独的线程上。这是我的建议,但也许这不是问题所在。您不能在NSO操作中实例化ASINetworkQueue并在那里处理委托方法吗?我做了同样的事情,虽然只是在NSO操作中使用了AsittpRequest和处理委托方法,但效果很好。