我在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