我在tabbarcontroller的第二個選項卡上設置了以下代碼。我第一次進入標籤時,正如我們所料,我的數據被正確提取。但是,如果我離開選項卡並返回,則獲取請求返回的array
包含條目的兩倍。它返回的每個對象都是重複的。如果我離開選項卡並再次返回,則條目會再次複製,每個條目都有3個。我的請求有什麼問題會導致這種情況發生?FetchRequest在後續執行中返回重複結果
- (void)viewWillAppear:(BOOL)animated {
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:delegate.managedObjectContext];
[fetchRequest setEntity:entity];
// sort the results, since we want the most recent entry first
NSSortDescriptor *dateSort = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:dateSort];
[fetchRequest setSortDescriptors:sortDescriptors];
NSError *error;
NSMutableArray *array = [[delegate.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
NSLog(@"error %@",[error localizedDescription]);
self.fetchedObjects = [array copy];
[array removeAllObjects];
[self.tableView reloadData];
}
更新:我切換到NSFetchedResultsController這個固定我的問題。
不,我沒有使用抓取的結果控制器。我不改變集合,只是在表格視圖中顯示它。數據可以從另一個選項卡中添加,這就是爲什麼我在viewWillAppear中重新獲取數據的原因。數據庫不包含額外的對象,只包含後續調用的數組。 – 2012-08-06 00:21:18
您應該在此控制器的每個方法中放置一個斷點,並查看數組中的計數更改的位置。你碰巧有一個setFetchedAttributes的自定義實現嗎? – 2012-08-06 00:28:41
執行提取時,計數加倍。如果我在提取之前和之後檢查數組,我可以看到重複的條目。在第一次執行時,它返回正確的金額。不,我沒有自定義的實現。 – 2012-08-06 00:33:02