使用Table View处理项目时收到内存错误。
我在一个新项目中复制了故事板并收到了同样的错误。
这是故事板布局:
如果"返回"显示删除按钮时按下按钮然后我收到内存错误如下:
02 - Running app and Memory error
用于删除的代码是:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove the row from data model
[tableData removeObjectAtIndex:indexPath.row];
// Request table view to reload
[tableView reloadData];
}
我发布此问题是为了了解有关Xcode和Objective-C的更多信息。
答案 0 :(得分:0)
删除此行:[tableView reloadData];
- 暗示。
将来你不需要发布Xcode的截图,只是给我们错误。
答案 1 :(得分:0)
请执行以下操作。对ivar使用现代属性,在实现中删除花括号中的声明,并在类中的任何位置将该属性称为self.tableData。请参阅以下内容中的评论:
// 1) add a private interface
@interface CDUTableViewController ()
@property(strong, nonatomic) NSMutableArray *tableData;
@end
@implementation CDUTableViewController
// 2) delete the declaration in braces here
- (void)viewDidLoad
{
[super viewDidLoad];
// 3) refer to self.tableData everywhere in this class
self.tableData = [NSMutableArray arrayWithObjects:@"Egg Benedict", // ...
}
删除时出现了很大的问题。删除后更新您的表以匹配您的模型。仅对删除编辑样式执行此操作:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.tableData removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
答案 2 :(得分:0)
这似乎是一个错误。使用Instruments,我发现_canEditRowAtIndexPath:消息被发送到CDUTableViewController的解除分配的实例(通过点击后退按钮从堆栈中弹出)。当表位于UITableViewController而不是UIViewController时,永远不会发送此消息 - 我不知道为什么会这样。
你可以通过使用UITableViewController,或者在CDUViewController中为CDUTableViewController创建一个强大的属性,并推送代码而不是使用segue来解决这个问题(这样你的CDUTableViewController就不会被解除分配了。 POP)。