Есть ли способ автоматически связать UITextField с переменной в моей модели данных?

Я строю контроллер представления, где я добавляю кучуUITextFieldс моей точки зрения программно. Я хочу предварительно заполнить текстовые поля некоторым текстом, который я загружаю из CoreData, но позволю пользователю войти и изменить этот текст, если он хочет. Затем мне нужно вернуться и снова сохранить этот новый текст обратно в CoreData, а также выполнить вычисления с использованием нового значения. Само сохранение и загрузка не являются проблемой, но я ищу хороший способ отследить, что изменил пользователь.

В прошлом я делал это с.tag собственностьUITextField иtextFieldDidEndEditing: метод делегата. Проблема в том, что в этом представлении будут десятки текстовых полей - достаточно, чтобы я не мог вспомнить, что.tag принадлежит к какой переменной в моей модели. Необходимость вернуться назад, чтобы посмотреть, какой тег я назначил при создании, будет болезненным, и все это кажется действительно подверженным ошибкам. Кроме того, я собираюсь создавать текстовые поля в нескольких различных циклах, поэтому получение уникального тега для каждого текстового поля при его создании будет затруднено (возможно, невозможно?).

То, что я ищу, - это способ «связать» UITextField с переменной в моей модели, когда я создаю его, и просто знаю с этого момента, когда пользователь обновляет это текстовое поле, значение, которое я указываю в моей модели, будет мгновенно обновлен для использования в будущих вычислениях и сохранения обратно в CoreData, когда пользователь покидает экран. Есть ли способ сделать это?

РЕДАКТИРОВАТЬ 1: Еще одна вещь, чтобы отметить, что моя модель сама по себе довольно сложная. У меня несколько разных кастомовNSObject подклассы, которые содержат разные части моих данных. Некоторые из объектов имеют свойства, которые сами являются другими пользовательскими объектами. У меня также есть словари, где значения будут экземплярами некоторых пользовательских объектов.

В качестве примера у меня могут быть следующие объекты:

MySmallObject1, который имеет свойстваname,size, а такжеvalue (всеNSStrings)MySmallObject2, который имеет свойстваdate а такжеcost (NSDate иNSNumber)MyBigObject, который имеет свойстваbox1 а такжеbox2 (которыеMySmallObject1 а такжеMySmallObject2 экземпляры соответственно)theDict, который являетсяNSDictionary экземпляр, который имеетMyBigObjects как значения

Поэтому, когда я создаю свои текстовые поля, я могу спуститься по дереву, которое будет выглядеть примерно так:

for (NSString *key in [theDict allKeys])
{
    UITextField *txt = [[UITextField alloc] initWithFrame:...];
    txt.text = [[(MyBigObject *)[theDict objectForKey:key] box1] name];
    [self.view addSubview:txt];
}

В этом случае мне нужно знать, когда пользователь изменяет текст в любом изtxt и обновите соответствующее значение через дерево.

РЕДАКТИРОВАТЬ 2: пытаясь реализовать предложение @ Till в комментариях, я начал читатьучебник по указателям в C, Кажется, мне нужно идти по этому пути, но я изо всех сил пытаюсь& а также* из мира C, чтобы хорошо играть с подклассами NSObject, о которых я упоминал в своем последнем редактировании из мира Objective-C. Чтобы заставить предложение @ Till работать, я думаю, что мне нужно каким-то образом сохранить место в памяти моего значения в этом сложном дереве объектов. Таким образом, мой блок кода из последней редакции стал бы:

.h
@property (nonatomic, strong) NSMutableDictionary *tagDict;

.m
for (NSString *key in [theDict allKeys])
{
    UITextField *txt = [[UITextField alloc] initWithFrame:...];
    txt.text = [[(MyBigObject *)[theDict objectForKey:key] box1] name];
    txt.tag = globalCounter;
    [tagDict addObject:[[(MyBigObject *)[theDict objectForKey:key] box1] name] forKey:[NSString stringWithFormat:@"%d",globalCounter]];
    globalCounter ++;
    [self.view addSubview:txt];
}

гдеglobalCounter являетсяint что я увеличиваю каждый раз, когда я кладу что-то вtagDict так что я могу сохранить его уникальным. Я думаю, что в этом случае я мог бы просто использоватьNSArray и это будет работать так же хорошо, и, вероятно, выглядит немного чище. Мой план заключается в использованииtagDict в моемtestFieldDidEndEditing любить:

- (void) textFieldDidEndEditing:(UITextField *)textField
{
    *[tagDict objectForKey:[NSString stringWithFormat:@"%d",textField.tag]] = textField.txt;
}

Это выдает ошибку дляAssigning to 'id' from incompatible type 'NSString *', Я не совсем уверен, что это значит. Есть ли способ, которым я могу использовать «оператор разыменования», чтобы изменить значение элемента, на который я указываю в моем словаре?

выдает ошибкуAddress expression must be an lvalue or a function designator, Я все еще немного размышляю о том, как этот указатель будет работать в мире Objective C, и я думаю, что есть кое-что, что я не до конца понимаю.

Ответы на вопрос(3)

Ваш ответ на вопрос