¿Hay una manera de vincular automáticamente un UITextField a una variable en mi modelo de datos?

Estoy construyendo un controlador de vista donde estoy agregando un montón deUITextFieldDesde mi punto de vista programáticamente. Quiero rellenar previamente los campos de texto con un texto que estoy cargando desde CoreData, pero permitir que el usuario entre y cambie ese texto si lo desea. Entonces necesito volver atrás y guardar ese nuevo texto de nuevo en CoreData, así como realizar cálculos usando el nuevo valor. El guardado y la carga en sí no son un problema, pero estoy buscando una buena manera de rastrear lo que el usuario ha cambiado.

En el pasado, he hecho esto con el.tag propiedad de laUITextField y eltextFieldDidEndEditing: método de delegado El problema es que voy a tener docenas de campos de texto en esta vista, lo suficiente como para que no pueda recordar realmente lo que.tag Pertenece a qué variable en mi modelo. Tener que volver atrás para buscar la etiqueta que asigné cuando la creé va a ser un dolor, y todo el asunto se siente realmente propenso a errores. Además, voy a crear los campos de texto en múltiples bucles diferentes, por lo que obtener una etiqueta única para cada campo de texto cuando lo cree será difícil (¿tal vez imposible?).

Lo que busco es una forma de "vincular" el UITextField a una variable en mi modelo cuando lo creo y solo sé desde ese momento que, cuando el usuario actualiza ese campo de texto, el valor que especifique en mi modelo será instantáneamente actualizado para ser usado en futuros cálculos, y guardado en CoreData cuando el usuario sale de la pantalla. ¿Hay alguna forma de hacer esto?

EDIT 1: Otra cosa a tener en cuenta es que mi modelo en sí es un poco complejo. Tengo varias costumbres diferentesNSObject Subclases que contienen todas diferentes partes de mis datos. Algunos de los objetos tienen propiedades que son otros objetos personalizados. También tengo diccionarios donde los valores serán instancias de algunos de los objetos personalizados.

Como ejemplo, podría tener estos objetos:

MySmallObject1, que tiene propiedadesname,sizeyvalue (todosNSStrings)MySmallObject2, que tiene propiedadesdate ycost (unNSDate y unNSNumber)MyBigObject, que tiene propiedadesbox1 ybox2 (que sonMySmallObject1 yMySmallObject2 instancias, respectivamente)theDict, que es unNSDictionary instancia que tieneMyBigObjects como valores

Entonces, cuando estoy construyendo mis campos de texto, podría estar bajando un árbol que se vería como:

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

En este caso, necesito saber cuándo el usuario cambia el texto en cualquiera de lostxt y actualizar el valor apropiado a través del árbol.

EDIT 2: al intentar implementar la sugerencia de @Till en los comentarios, comencé a leer untutorial sobre punteros en C. Parece que esta es la forma en que necesito ir, pero estoy luchando para obtener la& y* del mundo C para jugar bien con las subclases de NSObject que menciono en mi último EDIT del mundo Objective-C. Para que funcione la sugerencia de @Till, creo que necesito almacenar de alguna manera la ubicación de la memoria de mi valor en ese árbol de objetos complicado. Así que mi bloque de código de la última EDIT se convertiría en:

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

DóndeglobalCounter es unint que estoy aumentando cada vez que pongo algo entagDict para que pueda mantenerlo único Supongo que en este caso simplemente podría estar usando unaNSArray y funcionaría igual de bien, y probablemente se vea un poco más limpio. Mi plan es usartagDict en mitestFieldDidEndEditing me gusta:

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

Esto arroja un error paraAssigning to 'id' from incompatible type 'NSString *'. No estoy realmente seguro de lo que eso significa. ¿Hay alguna forma en que pueda usar un "operador de desreferenciación" para cambiar el valor del elemento al que estoy apuntando en mi diccionario?

arroja un errorAddress expression must be an lvalue or a function designator. Todavía estoy un poco confuso sobre cómo funcionaría este puntero en el mundo del Objetivo C, y creo que hay algo que no entiendo completamente.

Respuestas a la pregunta(3)

Su respuesta a la pregunta