Правильный способ добавить реляционные данные в Core Data - PullRequest
0 голосов
/ 14 января 2010

Я создал два объекта в моей модели: Учетная запись и Друг - где в 1 Учетной записи будет много Друзей. Я также создал эти два объекта в коде.

Я использую UITableView, чтобы показать свои учетные записи (все в порядке), и использую новый UIViewController, чтобы добавить новую запись. В новой записи я добавляю данные об учетной записи и получаю друзей из API. При переходе от UITableView к новому UIViewController я создаю пустой объект Account: UIViewController.account = account;

Теперь сложная часть. При сохранении этих данных я делаю следующее:

// Configure the new account with information from the form.
[account setUsername:[profileDict objectForKey:@"the_name"]];
[account setPassword:password.text]; // from formfield
[account setCreationDate:[NSDate date]];

// Commit the change.
NSError *error;
if (![account.managedObjectContext save:&error]) {
    // Handle the error.
    NSLog(@"save error");
}

NSManagedObjectContext *context = [account managedObjectContext];

for(NSArray *names in usernameArray) //usernameArray holds my Friends
{

    friend = [NSEntityDescription insertNewObjectForEntityForName:@"Friend" inManagedObjectContext:context];
    [account addReplyAccountsObject:friend];
    [friend setName:[names objectAtIndex:0]];
    [friend setPicUrl:[names objectAtIndex:1]];

    // Commit the change.
    NSError *error;
    if (![context save:&error]) {
        // Handle the error.
        NSLog(@"save error");
    }       
}

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

1 Ответ

1 голос
/ 14 января 2010

Я думаю, что в строке есть ошибка:

   friend = [NSEntityDescription insertNewOb...

Вам необходимо объявить тип вашей переменной:

   Friend *friend = [NSEntityDescription insertNewObj...

(Предполагается, что ваш класс Друг назван Friend.)

Кроме того, я не буду фиксировать изменения каждый раз в цикле. Внесите изменения, а затем, когда вы закончите, передайте их:

for(NSArray *names in usernameArray) //usernameArray holds my Friends
{
   // ...
}

// Commit the change.
NSError *error;
if (![context save:&error]) {
    // Handle the error.
    NSLog(@"save error");
}       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...