我有一個方法可以保存當前的託管上下文。在單獨的線程中衝突執行相同的方法?
但是最近在這個方法中出現了一個錯誤。在我的程序中的某些位置(但不是所有的時間),看起來好像這個方法的執行只是突然停止,一切都停止執行......儘管沒有崩潰。第一次執行工作。但是當我再次觸發事件時,就會發生錯誤。
但是,如果我插入一個斷點並一次執行一行,一切正常。
基本上我從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