我有以下设计的应用程序: 列出文档的表视图。 和编辑文档的ViewController。
编辑文档时,我想使用对象的副本,以防万一用户按下取消,我只是扔掉副本。如果用户选择保存我将修改后的文档复制到原始文 (我不能将所有文档的字段作为viewController中的属性,因为它们太多了。)
表视图控制器:
SelectedRowAtIndex {
document= [documentsArray objectAtIndex:indexPath.row];
viewController.assignedDocuemnt= document;
}
然后我有View控制器类,其中项目被修改:
@interface
@property (nonatomic,retain) Document *asignedDocument;
@property (nonatomic,retain) Document *editedDocument;
viewDidLoad{
editedDocument= [assignedDocuemnt copy];
}
IBAction save {
assignedDocument=editedDocument;
}
我的问题是documentsArray中的原始文档未使用已编辑的版本进行更新。 我错过了什么?
答案 0 :(得分:2)
您正在复制该值,然后通过参考将副本的引用分配回原始文件。这绝对不会起作用。
首先,跟踪他们在表格视图的viewcontroller中添加的文档。
然后添加一个处理程序,用于将所选文档替换为表视图的viewcontroller:
- (void)replaceSelectedDocument:(Document*)newDoc {
[documents replaceObjectAtIndex: editingIndex
withObject: newDoc];
}
要保存,请使用以下内容从编辑器视图控制器调用表视图控制器的新消息:
[tableViewController replaceSelectedDocument: editedDocument];
更好的方法是修改编辑器视图控制器以获取目标和操作,而不是显式地回调到表视图控制器。如果要保存,请调用操作:
[target performSelector: action withObject: editedDocument];
但这是学习曲线上的另一个障碍,你今天可能不需要克服它。