xcode/ios/coredata:添加新记录后,tableview 中的最后一条记录显示两次
Posted
技术标签:
【中文标题】xcode/ios/coredata:添加新记录后,tableview 中的最后一条记录显示两次【英文标题】:xcode/ios/coredata: Last record in tableview displays twice when after adding new record 【发布时间】:2015-03-20 18:22:54 【问题描述】:我遇到了一个奇怪的问题。当我将记录添加到实体(即来自某些屏幕的核心数据)时,表格视图不会显示新记录,而是重复上一条记录。
它总是发生在某些实体和屏幕上,即如果我添加记录、1、2、3 等,它将显示 1、1、1。对于使用相同代码的其他屏幕和实体,有时会发生这种情况,通常在大约 8 到 10 条记录之后。
在这些情况下,如果我添加名为 1,2,3…10 的记录,它将显示 1,2,3,4,5,6,7,8,8,8,8,8,8 等。
有没有人遇到过这种奇怪/令人毛骨悚然的行为?为什么它会立即或在某个时刻,即当记录数达到 8 条左右时,认为新记录与之前的记录相同?
注意,它可以很好地保存在核心数据中,因为当我关闭模拟器并重建时,它会显示正确的记录。
委托模式似乎也在工作——在某种程度上——因为它在添加一个新记录时显示一个新记录,只显示最后一个记录的副本,然后显示它卡住的记录,即 8,8,8等等
感谢您的任何建议。这已经让我发疯了一个星期了。
我发布没有代码,因为 SO 将不接受我出于某种原因发布的代码...很高兴发布任何请求的代码。
编辑:
#pragma mark - Table view data source
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
Lists *list = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = list.listname;
cell.detailTextLabel.text = list.list;
return cell;
回应邓肯:
Apple 的文档指出:
“一个委托必须至少实现一个变更跟踪委托方法才能启用变更跟踪。提供一个空的controllerDidChangeContent实现:就足够了。”
我的代码包括:
#pragma mark - NSFetchedResultsControllerDelegate
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller
//change
我知道有一个更详细的方法会更改内容,并且确实会针对不同情况使用 switch 语句更改内容,但文档说这没有必要。 (我也试过了,但没有解决问题。)我在标题中将列表文件声明为委托:
@interface ListsVC : UITableViewController<UITableViewDataSource, UITableViewDelegate,NSFetchedResultsControllerDelegate>
【问题讨论】:
你能发布 cellForRowAtIndexPath 方法吗? 您是否正确实现了 FetchedResultsController 委托方法?为他们发布代码。 我似乎终于找到了一个解决方案。它与排序描述符在不同的属性上排序有关,即与正在输入的字段相比,这显然会干扰委托过程。关于这是否是一个错误存在争议。在这里查看乔迪·哈金斯的回答:***.com/questions/12370521/… 【参考方案1】:对我来说,这是TableView
中的一个错误。
事实上,最后一行显示了两次,但“最后”行是空的。
我通过在链接的 css 中添加此代码解决了这个问题(用相同的背景和文本填充颜色填充空行并删除边框。
效果很好!
.table-row-cell:empty .table-cell
-fx-border-width: 0px;
-fx-background-color: white;
-fx-text-fill: white;
【讨论】:
以上是关于xcode/ios/coredata:添加新记录后,tableview 中的最后一条记录显示两次的主要内容,如果未能解决你的问题,请参考以下文章