0

我在 tabbarcontroller 的第二个选项卡上设置了以下代码。我第一次进入选项卡时,按预期正确获取了我的数据。但是,如果我离开选项卡并array返回,则 fetch 请求返回的条目包含双倍条目。它返回的每个对象都是重复的。如果我离开选项卡并再次返回,则条目会再次重复,每个条目都给我 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 这解决了我的问题。

4

3 回答 3

0

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

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

数据库实际上是否包含所有这些额外的对象,或者它只是这个控制器中的数组?

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

于 2012-08-06T00:12:45.033 回答
0

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

您能否向我们展示更多代码,包括已实现的UITableViewDataSource& UITableViewDelegate methods

于 2012-08-07T05:39:51.470 回答
0

切换到 NSFetchedResultsController 并解决了问题。

于 2012-08-09T16:57:08.357 回答