FetchRequest在后续执行时返回重复结果

时间:2012-08-05 23:55:02

标签: ios ios5 core-data

我在tabbarcontroller的第二个选项卡上设置了以下代码。我第一次进入选项卡时,正如预期的那样,我的数据被正确获取。但是,如果我离开选项卡并返回,则获取请求返回的array包含两倍的条目。它返回的每个对象都是重复的。如果我离开标签并再次返回,那么条目会再次重复,每次给我3个。我的要求是什么使我做错了?

- (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,这解决了我的问题。

3 个答案:

答案 0 :(得分:0)

没有什么能立即显示为什么会发生这种情况,但围绕实际提取本身的可疑编码表明您的委托方法或控制器的其他部分可能存在一些错误。

您是否也使用了获取的结果控制器?您是否稍后更改了fetchObjects集合?

数据库是否实际包含所有这些额外的对象,还是只是该控制器中的数组?

另外,请注意,在viewWillAppear中完成所有这些工作可能不是一个好的选择。

答案 1 :(得分:0)

如果您尝试将代码更改为self.fetchedObjects = [[delegate.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];

,该怎么办?

您是否还可以向我们展示更多代码,包括已实施的UITableViewDataSource& UITableViewDelegate methods

答案 2 :(得分:0)

切换到NSFetchedResultsController,它解决了这个问题。