多对一关系核心数据

时间:2014-03-05 17:30:29

标签: xcode core-data many-to-one

我显然是核心数据的新手,我已经从Apple和其他无数资源中读到了很多关于这个主题的内容。然而,似乎没有人像我这样的新手理解这种多对一关系。我似乎与一对一的关系很好,但我在理解多对一关系方面遇到了一些困难。

我的问题如下:

我正在开展一个小型项目来练习核心数据。在我的项目中,有两个实体:Person和Note,它们的关联如下: (抱歉,无法添加图片)

一个人可以有几个笔记,但笔记只能有一个所有者,人。 Person实体与一对多关系(指向实体的双箭头:Note)相关,而实体Note与多对一关系(指向Person的单箭头)

这是我到目前为止所做的:

Note.h

 @class Person;

 @interface Note : NSManagedObject

@property (nonatomic, retain) NSDate * noteCreateDate;
@property (nonatomic, retain) NSString * noteUser;
@property (nonatomic, retain) Person *person;

Person.h

  @class Note, Organise;

  @interface Person : NSManagedObject

  @property (nonatomic, retain) NSString * personAddress;
  @property (nonatomic, retain) NSData * personAvatar;
  @property (nonatomic, retain) NSString * personBDay;
  @property (nonatomic, retain) NSDate * personFutureDate;
  @property (nonatomic, retain) NSString * personGender;
  @property (nonatomic, retain) NSString * personName;
  @property (nonatomic, retain) NSString * personRelation;
  @property (nonatomic, retain) NSSet *notes;
  @property (nonatomic, retain) NSSet *organises;
  @end

  @interface Person (CoreDataGeneratedAccessors)

  - (void)addNotesObject:(Note *)value;
  - (void)removeNotesObject:(Note *)value;
  - (void)addNotes:(NSSet *)values;
  - (void)removeNotes:(NSSet *)values

在我的视图控制器中,我试图将注释保存如下:

   NSManagedObjectContext *context = [self managedObjectContext];
   Note *newNote;
    newNote = (Note *) [NSEntityDescription insertNewObjectForEntityForName:@"Note" inManagedObjectContext:context];

   // Saving the notes
   newNote.noteUser = noteTextView.text;
   newNote.noteCreateDate = added;
   [newNote setPerson:newNote.person];

  ///////////////Saving to the DataBase /////////
   NSError *error = nil;

   if ([self.managedObjectContext hasChanges]) {

    if (![self.managedObjectContext save:&error]) { //save failed
        NSLog(@"Save Failed: %@", [error localizedDescription]);
    }
    else {
        NSLog(@"Save Succeeded");
    }
}

它正在保存数据库中的数据,但问题是:数据库中的Person和Notes之间没有关系。数据库中人员的列为空(不显示该笔记所属的人)。

我尝试了几个尝试将这个人与笔记联系起来的东西,其中没有一个似乎有效。所以,似乎我被困了,我非常感谢一些帮助。

这是我用来帮助的最新教程: http://brandontreb.com/core-data-quicktip-inverse-relationships https://itunes.apple.com/fr/itunes-u/advanced-iphone-development/id407243028?l=en&mt=10

谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码不会在Note和Person之间创建任何关系。这样:

[newNote setPerson:newNote.person];

newNote.person = newNote.person;相同,不会改变任何内容。 您必须创建一个Person对象(或获取一个现有的Person),然后设置

newNote.person = thePerson; 

建立关系。