Справка Core Data Relationships Help ... должна быть базовой, я надеюсь - PullRequest
1 голос
/ 18 февраля 2011

Итак, у меня есть две взаимосвязи между двумя сущностями в основных данных, под названием «число» и «информация». Я даю пользователю их номер, и когда я это сделаю, я бы хотел, чтобы они взамен дали мне свое имя, чтобы я мог привязать его к их конкретному номеру. Кажется, я не могу понять, как правильно сделать код. Пока что самое близкое, что я думаю, это:

        for (UserNumber *pinNumbers in [entryView pinNumberArray]) {
            if ([numberString isEqualToString:pinNumbers.PIN]) {
                UserInfo *info = pinNumbers.info;   
                [info setName:nameField.text];  
            }
        }

где я перебираю число, которое они ввели, и если я могу найти его внутри массива, который заполняет данные ядра, я бы хотел, чтобы они присвоили ему свое имя. Может ли кто-нибудь показать мне пример того, как это можно сделать?

Спасибо.

1 Ответ

1 голос
/ 18 февраля 2011

Если ваша модель примерно такая:

enter image description here

таким образом, что между UserNumber и UserInfo существует двунаправленная связь «один-к-одному», тогда может показаться, что «number» может быть атрибутом UserInfo и упростить вашу модель. (Это тот случай, когда «число» уникально для каждого UserInfo?)

Но, следуя вашей текущей модели, предполагая, что отношение один к одному, что-то вроде этого должно работать - при условии, что UserNumber имеет атрибут 'number' и отношение to-one, называемое 'info', которое указывает на UserInfo.

// Search for UserNumber that has NSString* pinCode as value for attribute PIN
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"UserNumber"
                         inManagedObjectContext:managedObjectContext]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"PIN contains[cd] %@", pinCode];
[fetchRequest setPredicate:predicate];

NSError *error = nil;
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];

// UserNumber with matching PIN was found, so set name of associated UserInfo.
if ( [items count] == 1 )
    {   
    UserNumber *userNumber = [items lastObject];
    UserInfo *userInfo = [userNumber info];
    [userInfo setName:nameField.text];
    }

Обратите внимание, что элементы должны иметь либо ноль, либо один элемент. Если один, то первым элементом является соответствующий UserNumber. Пройдя через отношение userNumber 'info', вы сможете получить соответствующую UserInfo - при условии, что вы правильно создали ссылку ранее.

Обновление

При написании этого фрагмента кода я понял, что на самом деле не понимаю, что вы пытаетесь сделать ;-). Это часть процесса регистрации? Если это так, то вам придется иметь дело с созданием объекта UserInfo и отношений между объектами. Или это часть входа в систему? Или часть редактирования информации пользователя? В любом случае, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...