核心数据 - 插入具有两个实体的新对象

时间:2014-06-03 12:31:11

标签: ios core-data insert save

我有两个具有多对多关系的实体,每个列表可以有多个项目。

  • 列表
  • 项目

基本上我想要实现的是在点击时将项目保存到特定列表。

我已经想出如何保存新列表:

- (IBAction)handleBtnAddList:(id)sender

{ MyListAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
  NSManagedObjectContext *context = [appDelegate managedObjectContext];
  NSManagedObject *newList;

newList =  [NSEntityDescription
           insertNewObjectForEntityForName:@"List"
           inManagedObjectContext:context];
[newContact setValue:@"Shopping" forKey:@"name"];

NSError *error;
[context save:&error]; }

但是如何将项目保存到新创建的“购物”列表?

任何帮助表示赞赏。提前谢谢!


您好,终于有机会试试这个。它现在正在运行但遇到了另一个问题。我可以添加一个新列表,但似乎无法添加项目。

我查看了sqlite数据库,在'Item'实体下,名为'zLists'的列为空。如何获得与该项目所在的“列表”相对应的值?

这就是我所拥有的

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *list = [NSEntityDescription
                                   insertNewObjectForEntityForName:@"List"
                                   inManagedObjectContext:context];
[list setValue:@"Test List" forKey:@"name"];
NSManagedObject *item = [NSEntityDescription
                                      insertNewObjectForEntityForName:@"Item"
                                      inManagedObjectContext:context];
[item setValue:@"Test Item" forKey:@"name"];

我还尝试在最后添加它,但它会崩溃应用程序

[item setValue:@"Test List" forKey:@"lists"];

1 个答案:

答案 0 :(得分:0)

对于我使用代码的示例,您将需要这些先决条件......

  1. 您有核心数据模型NSManagedObjectModel
  2. 在该模型中,您有一个实体List
  3. 在该模型中,对于该实体,您有两个属性listDatelistText
  4. 您已使用Xcode为您的实体NSManagedObject准备(或已手动准备)List子类。
  5. 而不是您的代码行:[newContact setValue:@"Shopping" forKey:@"name"]; ...

    您可以选择使用点表示法以这种方式设置属性值...

    newList.listDate = [NSDate date];  //sets the attribute to current date and time
    newList.listText = <<some user input from (for example) a view controller>>;
    

    或者为了匹配您的语法,您可以选择以这种方式使用键值编码。

    [newList setValue:[NSDate date] forKey:@"listDate"];
    [newList setValue:<<some user input>> forKey:@"listText"];