2016-02-20 3 views
0

У меня есть модель данных с несколькими объектами. Для объектов, связанных друг с другом, после извлечения из одного объекта я могу получить доступ к атрибуту из другого объекта через отношение.IOS: получение данных ядра через отношение к одному

//class for artists 

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 
@class Songs; 

@interface Artists : NSManagedObject 
@property (nonatomic, retain) NSString * artistname; 
//this is relationship 
@property (nonatomic, retain) Songs *songs; 

//class for Songs 
#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 
@class Artists; 

@interface Songs : NSManagedObject 
@property (nonatomic, retain) NSString * songname; 
//this is relationship 
@property (nonatomic, retain) Artists *artists; 

Если отношения один-к-одному, когда я выполнял выборку художников и имеют managedobjectcontext, я могу получить песню каждого художника, используя следующие:

NSLog(@"song for one hit wonder%@",self.artists.songs.songname); 

Когда Я изменяю отношения от одного к одному, чтобы один-ко-многим, т. Е. Один художник, много песен, это больше не работает и выдает ошибку, которая ссылается [_NSFaultingMutableSet songname

Я попытался получить доступ к песне, используя значение для ключа безуспешно.

NSLog(@"songs:%@",self.artists.songs.valueForKey[@"songname"]); 

Кроме того, я попытался включить NSSet где-то с ссылкой сообщения об ошибке изменяемого набора и один-к-многих якобы захватил этот путь, но я не могу понять, как использовать NSSet.

NSSet *songs = self.artists.songs.songname;//gives incompatible pointer type warning 

Любые предложения, как один для извлечения значения из другого лица в случае отношения один-ко-многим было бы весьма признателен.

ответ

1

Прежде всего, это немного запутывает, чтобы установить имя объекта Core Data во множественную форму, потому что он всегда предлагает много.

Если изменить отношения в модели от одного к одному в один-ко-многим необходимо изменить тип в NSManagedObject подкласса NSSet, например

@property (nonatomic, retain) NSSet *songs; 

Вы можете доказать это автоматически воссоздавая подклассы NSManagedObject в Xcode.

+0

ОК. Итак, NSString изменится на NSSet? – zztop

+0

Я изменил NSString на NSSet и все еще получаю ошибку _NSFaultingMutableSet с именем песни – zztop

+0

Я обновил ответ. Самое простое исправление - воссоздать подклассы 'NSManagedObject' в Xcode. – vadian

Смежные вопросы