У меня есть push-сегмент от VC1 до VC2. При подготовке к переходу на VC2 я установил свойство VC2 с содержимым свойства в VC1 с помощью оператора «=». Затем я изменил содержимое этого свойства IN VC2. Теперь я должен передать это свойство обратно в VC1. У меня создалось впечатление, что я могу сделать это делегацией. Тем не менее, кажется, что он «волшебным образом» изменился, когда я изменил его в VC2. Я действительно не знаю, что это такое. Это должен быть оператор «=», назначающий одно и то же место памяти в свойстве в VC1 и VC2, что делает их правильными? Пожалуйста, дайте мне знать термин для этого и должен ли я хранить его так или повторить мою модель, поэтому я использую делегацию.Использование делегирования против «свойства обратной области видимости»
Спасибо.
EDIT/Сложение:
Так это property1 в VC1 prepareForSegue, устанавливает property1 VC2 в. Затем я изменяю свойство2 в тексте TextFieldDidEndEiting VC2. Когда я запускаю программу, свойство1 статически выделяется в VC1 в порядке. Затем я проверяю свойство1 в VC2 до его изменения, и это нормально, и затем я проверяю после его изменения и его правильное изменение. Однако, когда я возвращаюсь к VC1 (через кнопку «Назад» в контроллере навигации), я проверяю свойство 1 VC1, и это НОВАЯ модифицированная версия. Я думал, что должен использовать делегацию, чтобы передать ее обратно в VC1.
Мои вопросы были, что это называется? какой-то масштаб или наследование? И должен ли я настроить мою программу таким образом, или я должен заставить ее использовать делегацию, чтобы перейти от представления к модели?
VC1.M
@interface VC1()
@property(nonatomic, strong) NSMutableDictionary *property1;
@end
@implementation VC1
@synthesize property1= _property1;
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"VC2_SEGUE"]){
VC2 *mVC2 = (VC2 *)segue.destinationViewController;
mVC2.property1 = self.property1;
}
}
@end
VC2.H
@interface VC2: UITableViewController <UITextFieldDelegate>
@property(nonatomic, strong)NSMutableDictionary *property1;
@end
VC2.M
@implementation VC2
@synthesize property1 = _property1;
-(void)textFieldDidEndEditing:(UITextField *)textField
{
// Get the cell in which the textfield is embedded
id textFieldSuper = textField;
while (![textFieldSuper isKindOfClass:[CustomCel class]]) {
textFieldSuper = [textFieldSuper superview];
}
// Get that cell's index path
NSIndexPath *indexPath = [self.tableView indexPathForCell:(CustomCell *)textFieldSuper];
NSMutableArray *newObject = [[self.property1 objectForKey:[NSString stringWithFormat:@"%i", indexPath.section]] mutableCopy];
[newObject replaceObjectAtIndex:indexPath.row withObject:textField.text];
[self.property1 setObject:newObject forKey:[NSString stringWithFormat:@"%i", indexPath.section]];
}
@end
Edit:
Я действительно более любопытно, почему property1 изменяется в VC1, как только я изменю его в VC2. Я сделал то же самое только с NSString и назначил свойство в VC2 локальному значению, но он не вставил, как только я вернулся в VC1. Может ли это объяснить, пожалуйста :(
Вы можете указать пример кода? Я не совсем понимаю, чего вы пытаетесь достичь. –
@StefanFisk Sure Thing – user3213783
Я не смотрел код, но это звучит так, как будто вы * pass-by-reference *, если хотите * pass-by-copy *. Вероятно, этого можно достичь, установив атрибут 'copy' в' @ property'. – trojanfoe