2013-10-02 12 views
0

我有一個多線程應用程序,它可以在服務器和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; 
} 

是否有人知道爲什麼會發生?

+0

你可以發佈你創建並執行獲取請求的代碼嗎? –

+0

我發佈了代碼。 – neo

+0

是否設置了錯誤對象?如果是這樣,錯誤是什麼? –

回答

0

我想我知道爲什麼會發生這種情況。讀完NSManagedObject之後,我得出以下結論。當調用ExecuteFetchRequest時,會返回一個有故障的結果數組,這意味着除非在NSManagedObject上調用valueForKey方法,否則它的值不會從持久性存儲中檢索。由於我在方法中創建了上下文,並將結果返回給創建結果的上下文不存在的其他方法,所以我沒有得到任何結果。所有的故障最終都會失敗。

相關問題