gpt4 book ai didi

iphone - 如何刷新 UITableViewController 或 NSFetchedResultsController?

转载 作者:行者123 更新时间:2023-12-03 18:32:22 28 4
gpt4 key购买 nike

我的 UITableViewController 或 NSFetchedResultsController 有一点问题。我不确定问题出在哪里,但我猜是 UITableViewController。

正如我所说,我使用 NSFetchedResultsController 将数据填充到 UITableViewController 中。数据按日期排序,并按日期年份按部分显示,例如2010年5月/2010年6月/等等。这显示为节标题。

现在,当我添加新数据时,它会自动使用当前日期作为默认日期,但如果我想使用当前不在部分列表中的日期,例如2010 年 4 月(当前列表中为 5 月和 6 月),则显示不正确。只有当我退出应用程序并再次启动它时,它才会显示新的部分标题,一切都很好。

所以我需要以某种方式刷新或更新我的列表。仅将其添加到上下文中并更改它似乎并没有更新它。

同样,我不确定需要更新什么,是我的 NSFetchedResultsController 对象还是 UITableViewController。

更新#1:

我只是发现这个方法有一个异常(exception):

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{
// The fetch controller has sent all current change notifications, so tell the table view to process all updates.
[self.tableView endUpdates];

}

这是我移动数据的位置:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath 
{

UITableView *tableView = self.tableView;

switch(type)
{

case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;

case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;

case NSFetchedResultsChangeUpdate:
// [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];

break;

case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
// Reloading the section inserts a new row and ensures that titles are updated appropriately.
[tableView reloadSections:[NSIndexSet indexSetWithIndex:newIndexPath.section] withRowAnimation:UITableViewRowAnimationFade];
break;
}

}

此方法几乎取自 Apple 的 CoreDataBooks 示例。这是错误:

Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. *** -[NSMutableArray removeObjectAtIndex:]: index 1 beyond bounds [0 .. 0] with userInfo (null)

此后,编辑模式(出现删除按钮的位置)将不再起作用。

谢谢。

最佳答案

好吧,看起来我找到了解决方案,我只是跳过这些

[self.tableView beginUpdates];
[self.tableView endUpdates];

并且始终这样做。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{

[self.tableView reloadData];

}

我显然会给出更多的逻辑,因为只有当我想将数据移动到以前不存在的部分时才会出现问题。在有人能给我一个真正的解决方案之前,我会选择这个。

关于iphone - 如何刷新 UITableViewController 或 NSFetchedResultsController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3077332/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com