【问题标题】:How to save more than one people in an Entity (CoreData)如何在一个实体中保存多个人(CoreData)
【发布时间】:2012-03-23 12:04:24
【问题描述】:

我有一个看起来像这样的实体:

Entityname = Country

具有“城市”和“人”属性。

Country *country = [NSEntityDescription insertNewObjectForEntityForName:@"Country" inManagedObjectContext:context];


    country.city = @"New York";
    country.person = @"Doug";
    country.person = @"Carry";
    country.person = @"Arthur";

我想在那个城市中拯救不止一个

我正在使用上面发布的代码,但只保存了最后一个人。

我怎样才能在 CoreData 中保存一个以上的

希望你能帮助我。

【问题讨论】:

    标签: ios xcode core-data


    【解决方案1】:

    解决问题的方法是:

    1. 创建 3 个实体CountryCityPerson
    2. 使用 XCode 的图形工具设置实体的属性(例如 Country.name、City.name、Person.name 等)
    3. 设置实体之间的关系。您需要来自 Country -> City [称其为城市] 的一对多和来自 City -> Person [称其为 people] 的一对多(有关此主题,请参阅Apple's documentation)。请记住,您还需要设置反比关系。
    4. 这就是所有乐趣的开始... 选择编辑器 > 创建 NSManagedObject 子类。然后 Xcode 将根据您的模型生成文件。现在,如果您查看头文件,您应该会在生成的方法中看到与此类似的内容:

    ...

    - (void)addPersonObject:(Person *)value;
    - (void)removePersonObject:(Person *)value;
    - (void)addPersons:(NSSet *)value;
    - (void)removePersons:(NSSet *)value;
    

    ...

    从这一点很明显可以弄清楚如何添加多个对象:) 我知道这一切一开始可能看起来很困难,但是一旦你自己进入其中,你将真正能够轻松有效地管理复杂的对象图。 我希望这些信息能让您走上正轨!

    【讨论】:

    • 我试过了,但我不知道如何使用这种方法添加可变对象。这很复杂,也许你能帮我一点如何实现这些方法
    • 您可以通过@TechZen here找到有关该主题(一对多关系)的非常详细的答案
    【解决方案2】:

    您需要创建一个数组,其中包含您需要保存到核心数据模型的所有人。

    【讨论】:

    • 我该怎么做?我知道如何填充数组,但我如何保存数组CoreData?
    【解决方案3】:

    试试这个代码。希望对你有帮助

    yourArray = [[NSMutableArray alloc]initWIthObjects:@"Doug",@"Carry",@"Arthur"];
    
    for(int i = 0; i < [yourArray count]; i++)
    {
        NSManagedObjectContext *context = [self managedObjectContext];
        countryObject=[NSEntityDescription
                                  insertNewObjectForEntityForName:@"Country" 
                                  inManagedObjectContext:context]; 
        countryObject.city = @"New york";
        countryObject.people = [NSString stringWithFormat:@"%@",[yourArray objectAtIndex:i]];
        NSError *error;
        if (![context save:&error]) {
            NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
        }
    }
    

    更新:

    在你解释你不需要三个不同的实例之后,然后

    这可以通过为CityPeople创建一个单独的实体来完成,然后将它们之间的关系设为to-many relationship.,这样你就可以实现这样的目标。

    【讨论】:

    • 谢谢,这对我帮助很大。但现在我有另一个问题。我在带有自定义单元格的动态 tableviewcontroller 中获取了这些数据。例如,如果我使用您的代码,他会生成 3 个具有 City = NewYork 的单元格并拆分数组。单元格 1 = 道格,单元格 2 = 携带......在我的情况下,我需要他只创建一个名称为“纽约”和这三个属性的单元格。
    • 这可以通过为 City 和 People 创建一个单独的实体来完成,然后将它们之间的关系设为一对多关系。这样你就可以实现这样的目标。
    • 否则迭代你的循环并连接该数组中的所有三个值并存储在一个字符串中,然后将该字符串存储到核心数据中
    • 这不会将三个人添加到一个城市,它会创建三个Country 实例,每个实例具有相同的city 但不同的people 值。这不是 OP 要求的。
    • @Caleb 查看我的其他 cmets。不仅那个家伙,而且你也无法在同一个国家名称中保存三个人而不建立许多关系或一个字符串。
    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2019-11-04
    相关资源
    最近更新 更多