我遇到了一个奇怪的问题。当我将一条记录添加到实体中时,即来自某些屏幕的核心数据,表视图将重复上一条记录,而不是显示新记录。
它总是发生在一些实体和屏幕上,即如果我添加记录、1、2、3等,它将显示1、1、1。对于使用相同代码的其他屏幕和实体,这种情况有时会发生,通常发生在第八条到第十条记录之后。
在这些情况下,如果我添加名为1,2,3…10的记录,它将显示1,2,3,4,5,6,7,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;
}
回应Duncan:
苹果公司的文件说明:
"委托必须至少实现一个更改跟踪委托方法,才能启用更改跟踪。提供controllerIdChangeContent:的空实现就足够了。"
我的代码包括:
#pragma mark - NSFetchedResultsControllerDelegate
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
//change
}
我知道有一种更详细的方法可以更改内容,并且确实可以针对不同的情况使用switch语句更改内容,但文档中说这不是必要的。(我也试过了,但没有解决问题。)我用声明列表文件为头中的委托
@interface ListsVC : UITableViewController<UITableViewDataSource, UITableViewDelegate,NSFetchedResultsControllerDelegate>
对我来说,这是TableView
中的一个错误。事实上,最后一行显示了两次,但"最后一行"是空的。我通过在链接的css中添加这段代码解决了这个问题(用相同的背景和文本填充颜色填充空行并删除边框)。它很好用!
.table-row-cell:empty .table-cell
-fx-border-width: 0px;
-fx-background-color: white;
-fx-text-fill: white;