我准备了一个包含NSMutableArray数据的TableView。可以选择编辑和重新排序行。一切正常,直到手机关闭或后台运行的应用程序太多--Xcode中有一条错误消息,表明应用程序由于内存压力而意外退出。 我想添加一些命令来保留并记住以前的单元格顺序,因此在iPhone关闭后用户将具有与之前相同的顺序。
以下是我用于启用重新排序的代码。有什么遗漏?请耐心等待,这些只是我最初的开发尝试。
提前感谢您的帮助!
的Matus
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath: (NSIndexPath *)indexPath {
return UITableViewCellEditingStyleDelete;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[_Title removeObjectAtIndex:indexPath.row];
[_Images removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
NSString *item = [self.Title objectAtIndex:fromIndexPath.row];
[self.Title removeObject:item];
[self.Title insertObject:item atIndex:toIndexPath.row];
NSString *image = [self.Images objectAtIndex:fromIndexPath.row];
[self.Images removeObject:image];
[self.Images insertObject:image atIndex:toIndexPath.row];
}
- (void)tableView:(UITableView *)tableView didEndReorderingRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section]
withRowAnimation:UITableViewRowAnimationNone];
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
答案 0 :(得分:0)
您需要确保将更改保留到self.Title
和self.Images
。
如果您在tableView:MoveRowAtIndexPath:toIndexPath:
末尾添加对用于保存行顺序的代码的调用,则应始终保存行顺序的任何更改。
您可以通过在移动行后立即停止应用程序(Cmd+.
或停止标志)来测试此功能。
答案 1 :(得分:0)
我真的希望我能在这一点上发表评论......所以,我已经为写这个作为答案而道歉。
你真的不应该放弃操作系统关闭你的应用程序的事实。 这是主要问题。不是数据的持久性。
解决之后,您可以在离开应用程序时(使用UIApplicationDelegate protocol中的任一方法或一个方法)查看如何保留数据(使用Core Data或简单的plist文件) application notifications)。并在重新打开时加载它。