Как присвоить копию объекта обратно исходной ссылке? - PullRequest
1 голос
/ 31 июля 2009

У меня есть приложение со следующим дизайном: Table View, в котором перечислены документы.И 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 Ответ

2 голосов
/ 31 июля 2009

Вы копируете значение, а затем присваиваете ссылку копии обратно ссылку на оригинал. Это точно не сработает.

Во-первых, отследите, какой документ они добавляют в viewcontroller табличного представления.

Затем добавьте обработчик для замены выбранного документа другим в viewcontroller представления таблицы:

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

Чтобы сохранить, вызовите новое сообщение контроллера табличного представления из контроллера представления редактора с чем-то вроде:

[tableViewController replaceSelectedDocument: editedDocument];

Лучшим способом сделать это было бы изменить контроллер представления редактора, чтобы он использовал цель и действие вместо того, чтобы явно вызывать контроллер представления таблицы. Если вы хотите сохранить, вызовите действие:

[target performSelector: action withObject: editedDocument];

Но это еще один удар по кривой обучения, который вам, вероятно, не нужно преодолевать сегодня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...