2016-01-28 104 views
0

道歉的混亂和可能不準確的標題。如何將一對多關係對象分配給變量?

無論如何,我有兩個CoreData實體。列表和評論。列表可以有多個註釋,所以實體模型反映了這一點。

extension Listing { 

    @NSManaged var listingTitle: String? 
    @NSManaged var comments: NSSet? 
} 

extension Comment { 

    @NSManaged var comment: String? 
    @NSManaged var commentId: String? 
    @NSManaged var rating: Int32 
    @NSManaged var username: String? 
    @NSManaged var listing: Listing? 

} 

在應用中的某些時候,我想填充與評論一個UITableView,但我有一點很難做到這樣。

var listing: Listing? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //I assumed I could do this 
    var comments: [Comment] = [Comment]() 
    comments = listings?.comments // This throws an error saying NSSET cant be assigned to type [Comment] 

任何人都可以指導我以正確的方式完成我想要做的事情嗎?我可以看到這個問題與這樣一個事實有關,即在Listing實體中,這些委託被定義爲一個未定義類型的NSSet,所以我可能不能將該NSSet直接分配給一個Comment數組。

謝謝!

回答

0
comments = (listings?.comments.alObjects as! [Comment]) ?? [] 

這條線應該這樣做。

+0

嗯,我認爲你的意思是! [評論])?? [] 在這種情況下,我得到「從NSSet轉換到不相關的類型[連接]始終失敗」警告。 編輯:啊,在那裏添加「allObjects」至少刪除警告。一旦我證實它確實可行,我會接受答案:)謝謝! – ardevd

+0

如果您在其他地方添加另一行:'let test = listing!.comments.allObjects as! [評論]'(用於調試目的)。這會拋出一個錯誤? – Eendje

0

您可以通過以下方式訪問您的以上列表 - >評論。

override func viewDidLoad() { 
     super.viewDidLoad() 

     var listing = Listing() 

     //Assign listing coredata object according to your values and save it. 


     //Fetch above listing comments in array format and use it according to your requirement. 

     var listingComments:Array = listing.comments!.allObjects 
     let commentFirst:Comment = listingComments[0] as! Comment 
     print(commentFirst.commentId) 
     print(commentFirst.comment) 
     print(commentFirst.rating) 
     print(commentFirst.username) 
    } 

listingComments類似於你聲明的變量「VAR評論:[評論]」,你不需要明確寫入[註釋],您可以訪問的NSSet對象由它的allObjects屬性,並將其分配給數組目的。

相關問題