我有一个方法可以保存当前的托管上下文。在单独的线程中冲突执行相同的方法?
但是最近在这个方法中出现了一个错误。在我的程序中的某些位置(但不是所有的时间),看起来好像这个方法的执行只是突然停止,一切都停止执行......尽管没有崩溃。第一次执行工作。但是当我再次触发事件时,就会发生错误。
但是,如果我插入一个断点并一次执行一行,一切正常。
基本上我从JSON连接获取数据,然后保存这些对象。在保存对象的方法内部,我调用了一个'saveManagedContext'方法,这是发生错误的方法。
- (void)saveManagedObjectContext
{
NSLog(@"saving context 1");
NSManagedObjectContext *managedObjectContext;
// get the context for the current thread
NSThread *currentThread = [NSThread currentThread];
if ([currentThread.name isEqual:THREAD_NAME]) {
NSLog(@"saving context 2");
managedObjectContext = _backgroundQueueManagedObjectContext;
} else {NSLog(@"saving context 3");
//managedObjectContext = _managedObjectContext;
managedObjectContext = [self managedObjectContext];
}
NSLog(@"saving context 4");
NSError *error = nil;
if (managedObjectContext != nil) {
NSLog(@"saving context 5");
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"saving context 6");
[self logError:error];
//abort();
}
}
NSLog(@"saving context 7");
}
我已插入的NSLog在几乎每一行和执行通常停止后NSLog(@"saving context 5");
此方法被称为在单独的线程和我有一个理论它是在相对接近相同的时间被访问造成冲突。这里是我打印的一些NSLog输出。再次,大多数这些日志就像在上面的代码中发生的一样,在If's等下。
这个日志是当事情一次在1行正确执行时。
connection complete 10
connection has results
start saving json objects
end saving json objects
connection complete saving context
saving json objects thread block 1
saving context 1
saving json objects thread block 3
saving context 3
saving context 4
saving context 5
saving json objects thread block 4
saving json objects thread block 6
saving context 1
saving context 2
saving context 4
saving context 5
saving context 7
saving context 7
saving json objects thread block 7
inside block 1
inside block 2
该日志是挂起时。
connection complete 10
connection has results
start saving json objects
end saving json objects
connection complete saving context
saving context 1
saving context 3
saving context 4
saving context 5
saving json objects thread block 1
saving json objects thread block 3
saving json objects thread block 4
saving json objects thread block 6
saving context 1
saving context 2
saving context 4
saving context 5
用,虽然说,我已经看到了寻找不同的日志停止执行,但一般围绕节能方面5.
执行停止时,按Xcode上的暂停并查看线程在哪里。 – 2013-04-04 20:28:44