将关系数据添加到Core Data的正确方法

时间:2010-01-14 09:33:44

标签: iphone core-data

我在我的模型中创建了两个对象,即帐户和朋友 - 其中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 个答案:

答案 0 :(得分:1)

我认为该行存在错误:

   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");
}