如何将对象副本分配回原始参考?

时间:2009-07-31 07:22:06

标签: objective-c iphone

我有以下设计的应用程序: 列出文档的表视图。 和编辑文档的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中的原始文档未使用已编辑的版本进行更新。 我错过了什么?

1 个答案:

答案 0 :(得分:2)

您正在复制该值,然后通过参考将副本的引用分配回原始文件。这绝对不会起作用。

首先,跟踪他们在表格视图的viewcontroller中添加的文档。

然后添加一个处理程序,用于将所选文档替换为表视图的viewcontroller:

- (void)replaceSelectedDocument:(Document*)newDoc {
    [documents replaceObjectAtIndex: editingIndex
                         withObject: newDoc];
}

要保存,请使用以下内容从编辑器视图控制器调用表视图控制器的新消息:

[tableViewController replaceSelectedDocument: editedDocument];

更好的方法是修改编辑器视图控制器以获取目标和操作,而不是显式地回调到表视图控制器。如果要保存,请调用操作:

[target performSelector: action withObject: editedDocument];

但这是学习曲线上的另一个障碍,你今天可能不需要克服它。