UITableView中的重新排序单元格保持相同的顺序

时间:2014-08-23 17:34:43

标签: ios objective-c iphone xcode uitableview

我准备了一个包含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;   
}

2 个答案:

答案 0 :(得分:0)

您需要确保将更改保留到self.Titleself.Images

如果您在tableView:MoveRowAtIndexPath:toIndexPath:末尾添加对用于保存行顺序的代码的调用,则应始终保存行顺序的任何更改。

您可以通过在移动行后立即停止应用程序(Cmd+.或停止标志)来测试此功能。

答案 1 :(得分:0)

我真的希望我能在这一点上发表评论......所以,我已经为写这个作为答案而道歉。

你真的不应该放弃操作系统关闭你的应用程序的事实。 这是主要问题。不是数据的持久性。

解决之后,您可以在离开应用程序时(使用UIApplicationDelegate protocol中的任一方法或一个方法)查看如何保留数据(使用Core Data或简单的plist文件) application notifications)。并在重新打开时加载它。