Czy istnieje sposób automatycznego powiązania UITextField ze zmienną w moim modelu danych?

Buduję kontroler widoku, w którym dodam kilkaUITextFields moim zdaniem programowo. Chcę wstępnie wypełnić pola tekstowe jakimś tekstem, który ładuję z CoreData, ale pozwól użytkownikowi wejść i zmienić ten tekst, jeśli chcą. Następnie muszę wrócić i zapisać ten nowy tekst ponownie w CoreData, a także wykonać obliczenia przy użyciu nowej wartości. Samo zapisywanie i ładowanie nie stanowi problemu, ale szukam dobrego sposobu śledzenia tego, co zmienił użytkownik.

W przeszłości robiłem to za pomocą.tag własnośćUITextField itextFieldDidEndEditing: metoda delegowania. Problem polega na tym, że w tym widoku będę miał dziesiątki pól tekstowych - na tyle, że naprawdę nie pamiętam co.tag należy do jakiej zmiennej w moim modelu. Wracając, aby sprawdzić, jaki tag przypisałem, kiedy go stworzyłem, będzie to ból, a cała sprawa jest bardzo podatna na błędy. Dodatkowo, zamierzam tworzyć pola tekstowe w wielu różnych pętlach, więc uzyskanie unikalnego tagu dla każdego pola tekstowego podczas jego tworzenia będzie trudne (może niemożliwe?).

To, czego szukam, to sposób „powiązania” UITextField ze zmienną w moim modelu, gdy ją tworzę i wiem od tego momentu, kiedy użytkownik zaktualizuje to pole tekstowe, wartość określona w moim modelu będzie natychmiastowa zaktualizowany do wykorzystania w przyszłych obliczeniach i zapisywania z powrotem do CoreData, gdy użytkownik opuszcza ekran. Czy istnieje sposób, aby to zrobić?

EDYCJA 1: Inną rzeczą do odnotowania jest to, że mój model jest dość złożony. Mam kilka różnych zwyczajówNSObject podklasy, które zawierają różne części moich danych. Niektóre obiekty mają właściwości, które same w sobie są innymi obiektami niestandardowymi. Mam także słowniki, w których wartości będą instancjami niektórych obiektów niestandardowych.

Jako przykład mogę mieć następujące obiekty:

MySmallObject1, który ma właściwościname,size, ivalue (wszystkoNSStrings)MySmallObject2, który ma właściwościdate icost (naNSDate i anNSNumber)MyBigObject, który ma właściwościbox1 ibox2 (które sąMySmallObject1 iMySmallObject2 instancje, odpowiednio)theDict, który jestNSDictionary przykład, który maMyBigObjects jako wartości

Więc kiedy buduję moje pola tekstowe, być może rzeczywiście pójdę w dół drzewa, które wyglądałoby mniej więcej tak:

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

W tym przypadku muszę wiedzieć, kiedy użytkownik zmienia tekst w dowolnym ztxt i zaktualizuj odpowiednią wartość za pomocą drzewa.

EDYCJA 2: Podczas próby implementacji sugestii @ Till w komentarzach, zacząłem czytaćtutorial na temat wskaźników w C. Wygląda na to, że tak właśnie muszę iść, ale staram się zdobyć& i* ze świata C, aby dobrze grać z podklasami NSObject, o których wspominałem w moim ostatnim EDIT ze świata Objective-C. Aby sugestia @ Tilla zadziałała, myślę, że muszę w jakiś sposób zapisać lokalizację pamięci mojej wartości w tym skomplikowanym drzewie obiektów. Tak więc mój kod z ostatniego EDIT stałby się:

.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];
}

GdzieglobalCounter jestint że zwiększam za każdym razem, gdy coś wkładamtagDict więc mogę zachować to wyjątkowe. Myślę, że w tym przypadku mógłbym po prostu użyćNSArray i będzie działać równie dobrze i prawdopodobnie będzie wyglądać trochę czysto. Mój plan to wykorzystanietagDict w moimtestFieldDidEndEditing lubić:

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

To powoduje błąd dlaAssigning to 'id' from incompatible type 'NSString *'. Nie jestem pewien, co to znaczy. Czy istnieje sposób, w jaki mogę użyć „operatora wyłuskiwania”, aby zmienić wartość elementu, na który wskazuję w moim słowniku?

rzuca błądAddress expression must be an lvalue or a function designator. Nadal jestem trochę rozmyty, jak ten wskaźnik będzie działał w świecie Objective C i myślę, że jest coś, czego nie rozumiem w pełni.

questionAnswers(3)

yourAnswerToTheQuestion