0

我正在尝试在“编辑项目”页面上创建一个“删除”按钮,按下该按钮时将返回并删除上一页中的相关条目NSMutableDictionary,然后更新条目的表格视图列表。

它从“编辑项目”页面上的 IBAction 方法开始,它基本上什么都不做,只是将要删除的密钥提供回上一页的控制器:

- (IBAction)deleteItem:(id)sender {
    [_parentController removeItemWithDeleteButton:[_mainFactoidTextField text]];
}

这是操作实际开始的地方(在列表页面上):

- (void)removeItemWithDeleteButton:(NSString *)key {
    [_currentItemsDict removeObjectForKey:key];
    [self.navigationController popViewControllerAnimated:YES];
}

在该方法开始时,_currentItemsDict有 8 个对象,在removeObjectForKey:调用后下降到 7 个。然后它弹出顶部的 ViewController,即“编辑项目”页面,将我们返回到条目列表。

然后当该方法完成时,断点立即跳转到:

- (void)viewWillAppear:(BOOL)animated {
    NSArray *tempArray = [NSArray arrayWithArray:[_currentItemsDict allKeys]];
    NSArray *sortedArray = [tempArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
    _currentItemsArray = [NSMutableArray arrayWithArray:sortedArray];

    [_tableView reloadData];
}

但是到第一行viewWillAppear:_currentItemsDict已经恢复到 8 个对象。从那时起一切正常,但一切都与原来的 8 个条目一起工作,这意味着没有任何内容被删除。

根据我对这类事情的有限经验(我绝对还是个初学者),我猜这与popViewControllerAnimated:方法有关,但我不知道是什么。我很早就听说某些变量以不同的方式存储,这可能会使它们作为自己的早期版本返回,但我并没有完全理解这个概念。或者也许这完全是另外一回事,我不知道。我所能说的是_currentItemDict有 7 个对象,然后一行之后它又有 8 个。

任何人都可以帮助一个新人,并解释我要去哪里错了吗?或者,如果它更容易,您能否建议一个更好的解决方案来NSMutableDictionary从不同的 ViewController 中删除条目?(非常感谢代码示例和教程链接,因为我目前只是不够聪明,有时无法自己将理论转化为实践!)

预先感谢您的帮助!

4

1 回答 1

3

你知道属性在 Objective-C 2.0 中是如何工作的吗?我会在你的 parentViewController 中声明一个属性来包含你的 _currentItemsArray,声明为强引用。

@property (nonatomic,strong) NSMutableArray *_currentItemsArray;

此外,在您的 childViewController 中设置一个弱属性(您推送到删除的那个)

@property (nonatomic, weak) NSMutableArray *parentItemsArray;

推送时在 childViewController 上设置属性

childViewController.parentItemsArray = self._currentItemsArray;

[self.navigationController pushViewController:childViewController animated:YES];

删除 childViewController 中数组内的项目,而不是调用 parentController 上的方法

[self.parentItemsArray removeObjectAtIndex:indexOfKey];

这样做,您不必在 viewWillAppear 中再次对数组进行排序。相反,只需要求 tableView 重新加载数据

这有什么意义吗?

将您的逻辑包含在 cellForRowAtIndexPath、numberOfRowsInSection 和其他 tableViewDataSource 方法中也可能是明智的。

于 2013-06-21T20:23:33.823 回答