Gibt es eine Möglichkeit, ein UITextField automatisch an eine Variable in meinem Datenmodell zu binden?

Ich baue einen View Controller auf, in dem ich ein paar hinzufügeUITextFields aus meiner sicht programmatisch. Ich möchte die Textfelder mit Text füllen, den ich aus CoreData lade, aber dem Benutzer erlauben, diesen Text zu ändern, wenn er möchte. Ich muss dann zurückgehen und diesen neuen Text wieder in CoreData speichern sowie Berechnungen mit dem neuen Wert durchführen. Das Speichern und Laden selbst ist kein Problem, aber ich suche nach einer guten Möglichkeit, um zu verfolgen, was der Benutzer geändert hat.

In der Vergangenheit habe ich das mit dem gemacht.tag Eigentum derUITextField und dastextFieldDidEndEditing: delegieren Methode. Das Problem ist, dass ich in dieser Ansicht Dutzende von Textfeldern haben werde - genug, damit ich mich nicht wirklich daran erinnern kann, was.tag gehört zu welcher Variablen in meinem Modell. Zurückgehen zu müssen, um nachzuschlagen, welches Tag ich bei der Erstellung zugewiesen habe, wird ein Problem sein, und das Ganze fühlt sich wirklich fehleranfällig an. Außerdem werde ich die Textfelder in mehreren verschiedenen Schleifen erstellen, sodass es schwierig (vielleicht unmöglich?) Ist, für jedes Textfeld ein eindeutiges Tag zu erhalten, wenn ich es erstelle.

Ich suche nach einer Möglichkeit, das UITextField beim Erstellen an eine Variable in meinem Modell zu "binden". Von diesem Zeitpunkt an wird der in meinem Modell angegebene Wert sofort angezeigt, sobald der Benutzer dieses Textfeld aktualisiert aktualisiert, um in zukünftigen Berechnungen verwendet zu werden, und wieder in CoreData gespeichert zu werden, wenn der Benutzer den Bildschirm verlässt. Gibt es eine Möglichkeit, dies zu tun?

EDIT 1: Eine andere Sache zu beachten ist, dass mein Modell selbst ein bisschen komplex ist. Ich habe verschiedene SittenNSObject Unterklassen, die alle verschiedene Teile meiner Daten enthalten. Einige der Objekte haben Eigenschaften, die selbst andere benutzerdefinierte Objekte sind. Ich habe auch Wörterbücher, in denen die Werte Instanzen einiger der benutzerdefinierten Objekte sind.

Als Beispiel könnte ich diese Objekte haben:

MySmallObject1, die Eigenschaften hatname,size, undvalue (allesNSStrings)MySmallObject2, die Eigenschaften hatdate undcost (einNSDate und einNSNumber)MyBigObject, die Eigenschaften hatbox1 undbox2 (welche sindMySmallObject1 undMySmallObject2 Instanzen)theDict, das ist einNSDictionary Instanz, die hatMyBigObjects als Werte

Wenn ich also meine Textfelder baue, gehe ich möglicherweise einen Baum hinunter, der ungefähr so ​​aussieht:

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

In diesem Fall muss ich wissen, wann der Benutzer den Text in einer der Optionen änderttxt und aktualisieren Sie den entsprechenden Wert über den Baum.

EDIT 2: Während ich versuchte, @ Tills Vorschlag in den Kommentaren umzusetzen, fing ich an, a zu lesenTutorial zu Zeigern in C. Es scheint, als müsste ich so vorgehen, aber ich kämpfe darum, das zu bekommen& und* aus der C-Welt, um gut mit den NSObject-Unterklassen zu spielen, die ich in meinem letzten EDIT aus der Objective-C-Welt erwähnt habe. Damit @ Tills Vorschlag funktioniert, muss ich den Speicherort meines Werts in diesem komplizierten Objektbaum irgendwie speichern. So würde mein Codeblock aus dem letzten EDIT werden:

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

WoherglobalCounter ist einint dass ich jedes Mal inkrementiere, wenn ich etwas hineinlegetagDict so kann ich es einzigartig halten. Ich denke in diesem Fall könnte ich einfach eine verwendenNSArray und es würde genauso gut funktionieren und wahrscheinlich ein wenig sauberer aussehen. Mein Plan ist es zu benutzentagDict in meinemtestFieldDidEndEditing mögen:

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

Dies wirft einen Fehler fürAssigning to 'id' from incompatible type 'NSString *'. Ich bin mir nicht sicher, was das bedeutet. Gibt es eine Möglichkeit, den Wert des Elements, auf das ich in meinem Wörterbuch verweise, mit einem "Dereferenzierungsoperator" zu ändern?

wirft einen FehlerAddress expression must be an lvalue or a function designator. Ich bin immer noch ein bisschen verwirrt, wie dieses Zeigermodul in der Objective C-Welt funktionieren würde, und ich glaube, es gibt etwas, das ich nicht vollständig verstehe.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage