我有一個多線程應用程序,它可以在服務器和ios設備之間同步數據。SQLLite查詢有結果,但從方法返回時,它丟失數據
同步發生在單獨的線程上。我使用單例模式 NSManagedObjectContext它在主線程上創建。我開始有線程問題,並且在研究中,我發現上下文不應該在已經初始化的線程之外使用。所以我在主線程的上下文中調用init,並在我的同步線程中使用它。爲了解決這個問題,我做了以下工作。
我創建了一個全局方法,該方法返回 NSPersistentStoreCoordinator,並在同步線程上使用此協調器來創建新的上下文。這擺脫了線程問題,但現在我得到了一些其他奇怪的行爲。
在我的同步線程中,我調用executeFetchRequest方法,並將結果數組返回給其他一些方法。當我調試時,我看到有93條記錄,並且都填充了數據。然後,我檢查返回的方法上的數組,但即使我仍然得到93條記錄,列都沒有值。
下面是代碼
+(NSArray *) GetAllRowsInTable:(NSString *) tableName
{
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setPersistentStoreCoordinator:[Globals GetPersistentStoreCoordinator]];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:tableName inManagedObjectContext:context]];
NSError *error;
NSArray *results = [context executeFetchRequest:request error:&error];
return results;
}
是否有人知道爲什麼會發生?
你可以發佈你創建並執行獲取請求的代碼嗎? –
我發佈了代碼。 – neo
是否設置了錯誤對象?如果是這樣,錯誤是什麼? –