2012-01-26 107 views
0

好吧,我瘋了試圖找出這一個,所以我想我會張貼它,看看是否有人知道發生了什麼事。核心數據丟失的對象

我將實體添加到核心數據並檢索它們,並在我的應用程序中完美顯示。但由於某種原因,當我使用NSFetchRequest來獲取某種類型的所有實體的列表時,它總是返回一個比應該少的對象。我知道該對象是某個地方,因爲我的應用程序可以在應用程序的其他地方顯示數據。另外,我手動檢查了sqlite文件並注意到它也缺少一個對象。如果我的應用程序正在訪問數據,這怎麼可能?

下面是我用來獲取實體的代碼。我在整個應用程序的許多地方都使用這個代碼,它總是返回一個較少的對象,然後真的存在,但是我的應用程序仍然要訪問它。

NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MWLocationItem" 
              inManagedObjectContext:context]; 
[fetchRequest setEntity:entity]; 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:nil]; 

有沒有人知道發生了什麼?請讓我知道是否有任何其他代碼,你想看到。

+0

你如何驗證它有一個較少的對象? fetchedObjects.count? – sosborn

+0

是的。在我的應用程序的某些地方,它會返回正確的數字,然後在其他地方返回少一個。並手動檢查sqlite文件顯示一個對象丟失。 – edc1591

+0

看起來我添加的第一個對象是「缺少的」對象。什麼可能導致它不會出現在sqlite文件中? – edc1591

回答

1

我認爲這是如果你忽略了錯誤對

[NSManagedObjectContext save:nil] 

嘗試使用下面的方法,來檢查是否一切都好可以是可能

[NSManagedObjectContext save:&error] 

2.另一個可能的原因可能是您將includesPendingChanges屬性設置爲fetchrequest

request.includesPendingChanges = NO; 

如果沒有正確的答案:)你可以提供更多的源代碼行嗎?

+0

問題是我不得不在另一個地方添加另一個保存電話。它現在似乎在工作。 – edc1591