作者wrt (一片小蛋糕)
看板MacDev
标题[问题] Core Data relation没有作用
时间Tue Oct 4 03:52:49 2016
如题
我已经设定好relation
算是蛮简单的练习而已
不过不知道为何我用sql看coredata的资料库时,发现并没有正确的帮我建立对应关系
例如
一个Album只能有一个singer
一个singer可以有很多个Album
然後我去建立资料
singer:A
Album:01
singer:A
Album:02
singer:A
Album:03
这时去看sql资料应该要是
pk singer
1 A
2 A
3 A
pk Album singer
1 01 1
2 02 1
3 03 1
但是我跑出来的都是
pk singer
1 A
2 A
3 A
pk Album singer
1 01 1
2 02 2
3 03 3
虽然Album有建立与singer的relation,而且最後出来的singer都是A
但是总觉得哪里怪怪的,跟期待的不一样,原本期待singer(key)都只会是1而已
好像coredata并没有帮我搜寻我建立的singer是不是重复的
没有在建立关系时帮我统一对应到一个
这是本来受这样吗?还是我哪边可能有出错呢?
coredata是用xcdatamodel建立的
我检查singer跟album的relation有箭头互相指
----------------------
@interface Album (CoreDataProperties)
@property (nullable, nonatomic, retain) NSString *album_name;
@property (nullable, nonatomic, retain) Singer *singer;
@end
-----------------------
@interface Singer (CoreDataProperties)
@property (nullable, nonatomic, retain) NSString *name;
@property (nullable, nonatomic, retain) NSSet<Album *> *album;
@end
-----------------------
Singer *singer = [self.appDelegate creatSinger];
singer.name = self.singerField.text;
Album *album = [self.appDelegate creatAlbum];
album.album_name = self.albumField.text;
album.singer = singer; //建立album与singer关系
-----------------------
- (Singer *) creatSinger {
NSManagedObjectContext *moc = [self managedObjectContext];
Singer *singer = [NSEntityDescription insertNewObjectForEntityForName:@"Singer" inManagedObjectContext:moc];
return singer;
}
- (Album *) creatAlbum {
NSManagedObjectContext *moc = [self managedObjectContext];
Album *album = [NSEntityDescription insertNewObjectForEntityForName:@"Album" inManagedObjectContext:moc];
return album;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.241.102.252
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MacDev/M.1475524374.A.46E.html
※ 编辑: wrt (123.241.102.252), 10/04/2016 04:08:32
1F:推 sdyy: 你这样的写法一定会一直产生新singer... 10/04 20:18
2F:→ wrt: 我知道,只是对应到album的时候没办法都统一对应到同一个sin 10/04 21:54
3F:→ wrt: ger吗 10/04 21:54
4F:推 sdyy: 先fetch看是否已有同名歌手 没有才新增 再把歌手给album即 10/05 10:54
5F:→ sdyy: 可 10/05 10:54
6F:→ wrt: 感谢大大回答,原来规则要另外建立,我以为coredata会自己规 10/05 11:25
7F:→ wrt: 划 10/05 11:25