копирование пользовательского объекта

У меня есть объект под названием Layer, который имеет некоторые атрибуты и некоторые методы.

Мне нужно передать Layer во второй контроллер представления:

SecondVC *view = [self.storyboard instantiateViewControllerWithIdentifier:@"2VC"]; view.Layer = [[Layer alloc] initWithMapLayer:self.Layer]; view.delegate = self; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:view]; navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [self presentModalViewController:navController animated:YES]; 

в SecondVC я могу изменить атрибуты. Затем я возвращаю объект Layer через делегат;

 -(void)done { [self.delegate returnLayer:self.layer]; [self dismissModalViewControllerAnimated:YES]; } 

теперь моя проблема в том, что я передаю указатель на мой объект Layer первого контроллера представления, и когда я обновляю Layer во втором контроллере представления, также обновляется мой объект Layer первого объекта просмотра.

из-за этого, я не могу сказать, было ли изменено (если есть, мне нужно запустить некоторый код).

как я могу создать копию объекта Layer и передать это вместо указателя на объект Layer моего первого представления?

РЕДАКТИРОВАТЬ:

Я попытался использовать второй метод init:

 -(id)initWithLayer:(Layer *)Layer { if (self = [super init]) { self.call = [[FunctionCall alloc] init]; self.HUD = [[MBProgressHUD alloc] init]; self.Layers = [[NSMutableDictionary dictionaryWithDictionary:Layer.Layers] copy]; self.nameList = [[NSArray arrayWithArray:Layer.nameList] copy]; } return self; } 

который не сработал.

EDIT2:

пытался

 Layer *copyLayer = [self.myLayer copy]; layerView.myLayer = copyLayer; 

и получил ошибку

 -[layer copyWithZone:]: unrecognized selector sent to instance 0xfc72c40 2012-06-12 11:15:28.584 Landscout[8866:1fb07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Layer copyWithZone:]: unrecognized selector sent to instance 0xfc72c40' 

РЕШИТЬ:

Я добавил глубокую копию метода initWithLayer:

 for (id key in layer.layers) { [newLayers setValue:[[layer.layers objectForKey:key] mutableCopy] forKey:[key mutableCopy]]; } for (id name in layer.nameList) { [newList addObject:[name mutableCopy]]; } 

это дает мне копию объекта Layer

Вам нужно будет реализовать функцию copy для вашего объекта

В вашем Layer.m

 - (id)copy { Layer *layerCopy = [[Layer alloc] init]; //YOu may need to copy these values too, this is a shallow copy //If YourValues and someOtherValue are only primitives then this would be ok //If they are objects you will need to implement copy to these objects too layerCopy.YourValues = self.YourValues; layerCopy.someOtherValue = self.someOtherValue; return layerCopy; } 

Теперь в вашей вызывающей функции

 //instead of passing self.Layer pass [self.Layer copy] view.Layer = [[Layer alloc] initWithMapLayer:[self.Layer copy]]; 
  • Все UIElements становятся недоступными после завершения анимации
  • Как предотвратить UIView от потребления пользовательского ввода
  • Начать действие с помощью кнопки, когда она уже идет.
  • Как переключить новый контроллер представления в iOS?
  • Вертикальная и горизонтальная прокрутка в IOS
  • UIGestureRecognizer - получить ссылку на затронутый UIViewController вместо его просмотра?
  • Устранение сбоев NavigationController.Viewcontrollers (с настраиваемыми переходами)
  • NSDiacriticInsensitivePredicateOption не поддерживается Realm
  • iOS: завершение задачи при вводе фона
  • Шаблон DataSource и параметр «Свойства» при настройке объектов
  • Сортировка номеров в NSArray?
  • Interesting Posts

    Error Domain = com.flickr Code = 108 «Операция не может быть завершена

    Ярлыки в представлении предупреждения запроса доступа ALAssetsLibrary не распознаются KIF

    Изменение формы по умолчанию прямоугольника формы UIImageview

    Swift Project: «Отсутствие необходимых модулей» при импорте модульной структуры

    Создайте статическую библиотеку iOS, используя OpenGL ES 2.0 с cmake

    iOS 5 UITableViewCell пользовательский XIB также «Я теряю рассудок?»

    Swift – настройка fontSize в соответствии с шириной макета (программно)

    fbauth2 отсутствует в вашем Info.plist под LSApplicationQueriesSchemes и требуется для iOS 9.0

    Как взять UIImage из AVCaptureVideoPreviewLayer вместо захвата AVCapturePhotoOutput

    Различия – CFNetwork / NSURLConnection

    как добиться того, что приложение app (iOS версия) будет обработано после убийства Whatsapp путем прокрутки вверх

    Сортировка NSMutableArray с настраиваемыми объектами другим NSMutableArray

    Обработчик завершения UIActivityViewController завершен при использовании AirDrop

    UISlider с разными цветами

    Являются ли алгоритмы сортировки используемыми стабильными сортами NSArray?

    Давайте будем гением компьютера.