2016-08-23 51 views
-2

我有使用CoreData的問題。CoreData在添加與關係的新實體時崩潰

我有以下型號:

實體:圖書館有很多書 實體的關係:書到一個圖書館

我想補充一本書的關係,當我設置其與圖書館的關係,應用程序崩潰。

import UIKit 
import CoreData 

class ViewController: UIViewController { 

var library: Library! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    addCheckIt("", author: "") 
} 

func addCheckIt(title: String, author: String) { 
    let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 
    let bookDescription = NSEntityDescription.entityForName("Book", inManagedObjectContext: context) 
    let myBook = Book(entity: bookDescription!, insertIntoManagedObjectContext: context) 

    myBook.title = title 
    myBook.author = author 

    myBook.library = library 

    do { 
     try context.save() 
    } catch let err as NSError { 
     print(err.debugDescription) 
    } 
} 

} 

它在myBook.library = library中崩潰。然後我得到這個錯誤:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet'

我已經搜索了幾個小時,我找不到解決方案,請幫助我。

extension Library { 

    @NSManaged var name: String? 
    @NSManaged var books: NSSet? 

} 

extension Book { 

    @NSManaged var author: String? 
    @NSManaged var title: String? 
    @NSManaged var library: Library? 

} 
+0

Pablo,這是一個好主意,重新發布這個問題,並正確地重新上傳屏幕截圖。 –

+0

你確定你已經聲明'library'是一對多的關係,而不是多對一或多對多的? –

+0

設置其關係後,刪除應用程序,清理並構建項目。 – Himanshu

回答

1

我建議你使用NSOrderedSet作爲一對多關係(如果你沒有這樣做)。

class Library{ 
    @NSManaged var books: NSOrderedSet 
    ... 
} 

Book類應該是

class Book{ 
    @NSManaged var library: Library 
    ... 
} 

其中xcdatamodeld應該是模型之間的關係的名稱。另一件事,關係在你的情況下必須相反。 最後,我建議你設置:

library.books.addObject(book)

但做到這一點,你需要使用一個NSMutableOrderedSet代替NSOrderedSet

UPDATE

嘗試創建Book對象如下所述:

let book: Book = NSManagedObject(entity: bookDescription, insertIntoManagedObjectContext: context) as! Book 
+0

謝謝,我改變了,做了一個按照您的建議訂購的設置,但我仍然得到錯誤 – ppablo

+0

我編輯我的回答 – ciccioska

+0

感謝再次,我會立即嘗試 – ppablo