2016-02-19 88 views
0

我有一個核心數據的主控細節控制器,用於從一個實體(即作者)中獲取對象,然後讓您詳細查看其中一個對象,一位作者。IOS /核心數據:如何通過關係從其他實體獲取屬性

作者對象與第二個實體Books有一對多的關係。對於每位作者,我希望展示他們書籍的可點擊列表。

我的第一個問題是顯示作者頁後,我將如何獲取書籍列表。

最後,我想將標籤或按鈕中的列表顯示爲可點擊的文本,可能使用NSAttributed Text,但現在只需檢索書籍列表即可。

作者有書本的關係,題爲,這是一對多和書籍有作者的相互關係,有權作者,這是一一對應的。

我將books.h(數據文件)導入authorsVC.h和authorsDetail.h控制器。

的authors.h文件有一個屬性如下:

@property (nonatomic, strong) Books *authorBook; 

下面的代碼不會拋出異常,但註銷空。

NSLog(@"books %@", _authorBook.bookname); //logs as null even when there are books for the author. 

此代碼拋出所示的例外:

NSLog(@"books %@", _author.book.bookname); 

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_NSFaultingMutableSet bookname]: unrecognized selector sent to instance 
+0

您是否在創建實體時保存上下文之前設置了關係? –

+0

Core Data中一對多關係的** many **方面總是由一個'NSSet'對象表示。這也在異常錯誤消息中指出。 – vadian

+0

我在哪裏使用NSSet? bookname只是書本實體中的屬性名稱。 – zztop

回答

0

下面的代碼做到了。類似湯姆的,我不允許我給予評價,但只作了一些調整,因爲它不接受點符號。 valueForKey用於數組。

NSSet *books = _book.author; 
    NSArray *booksarr = [[files valueForKey:@"author"] allObjects]; 
    NSString *bookstr = [booksarr componentsJoinedByString:@","]; 

一旦在字符串中,您可以根據需要顯示它。

0

一對多在覈心數據關係被實現爲NSSet實例。在你的情況下,因爲Author - >Book是一對多的關係,_author.bookBook實例的NSSet--這是書籍的集合。 Book可能有一個稱爲bookName的屬性,但NSSet沒有。

如果你只是想這本書的名字,你會使用

_author.book.valueForKey[@"bookName"] 

,詢問組中的每個BookbookName並返回一個新的集只是這本書的名字。

+0

我得到錯誤「Property'valueForKey'not found on type of Books *」 – zztop

+0

不知道爲什麼我不能使用valueForKey .... – zztop

+0

這是否在for循環?試過NSSet * books = _author.book; NSSet * bookNames = [books valueForKey:@「bookName」]; for(NSManagedObject * bookName in bookNames){ NSLog(@「book name is:%@」,bookName); };但是,變量bookNames是空的,for循環不執行。書本實體中肯定有書名。 – zztop