“删除”按钮显示在表视图上时出现IOS内存错误
我在使用表视图处理项目时收到内存错误 我在一个新项目中复制了故事板,并收到了相同的错误“删除”按钮显示在表视图上时出现IOS内存错误,ios,iphone,objective-c,xcode5,Ios,Iphone,Objective C,Xcode5,我在使用表视图处理项目时收到内存错误 我在一个新项目中复制了故事板,并收到了相同的错误 这是故事板布局: 如果在显示删除按钮的同时按下“后退”按钮,则会出现如下内存错误: 用于删除的代码为: - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return NO if you do not want the specified item to
这是故事板布局: 如果在显示删除按钮的同时按下“后退”按钮,则会出现如下内存错误:
用于删除的代码为:
- (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的信息
删除此行:
[tableView reloadData]代码>-其含义
将来您不需要发布Xcode的截图,只要告诉我们错误就可以了。请执行以下操作。为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];
}
}
这似乎是一个bug。使用工具,我发现一个_canEditRowAtIndexPath:消息被发送到CDUTableViewController的一个已解除分配的实例(在点击后退按钮将其弹出堆栈之后)。当表位于UITableViewController而不是UIViewController中时,不会发送此消息——我不知道为什么会这样
您可以通过使用UITableViewController或在CDUViewController中为CDUTableViewController创建一个强属性,并推入代码而不是使用segue(这样您的CDUTableViewController就不会在pop上解除分配)来绕过此问题 我在我的一个项目中尝试过这个,但没有得到任何错误。你能把这个新项目发布到某个地方让我们下载吗?谢谢rdelmar。这是项目;[链接]dtrotzjr,感谢您的及时回复和反馈。删除该行显然不能解决问题。我已经在OP的项目中对此进行了测试,但它不能解决问题。我只看到UIViewController中的表视图存在此问题。当我在使用UITableViewController的项目中执行此操作时,不会出现错误。不知道为什么,但在弹出(并解除分配)后会向控制器发送一条消息。很有趣。现在对我来说还不错。“也许我需要做更多的测试。”@rdelmar。请试试我做的这个(为在3.5英寸sim卡上运行7.1而构建),它会像OP一样崩溃(将手机向左滑动,然后按“后退”而不按“删除”按钮)。我确认。但是第二次尝试后它崩溃了。谢谢你的帮助。我尝试了UITableViewController选项,它工作正常。起初,我没有创建表视图控制器,因为我在IB中关联自定义类时遇到了问题,但肯定是这样。