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