我显然是核心数据的新手,我已经从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
谢谢。
答案 0 :(得分:0)
您的代码不会在Note和Person之间创建任何关系。这样:
[newNote setPerson:newNote.person];
与newNote.person = newNote.person;
相同,不会改变任何内容。
您必须创建一个Person对象(或获取一个现有的Person),然后设置
newNote.person = thePerson;
建立关系。