添加具有关系的新实体时CoreData崩溃

时间:2016-08-23 10:12:50

标签: ios swift core-data

使用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 =库崩溃了。然后我收到了这个错误:

  

由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' *** - [NSSet intersectsSet:]:set参数不是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?

}

1 个答案:

答案 0 :(得分:1)

我建议您使用NSOrderedSet作为一对多关系。(如果您还没有这样做)。

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

你的Book课程应该是

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

xcdatamodeld中的图书图书馆应该是模型之间关系的名称。 另一件事,在你的情况下,关系必须相反。 最后我建议你设置:

library.books.addObject(book)

但要做到这一点,你需要使用 NSMutableOrderedSet 而不是 NSOrderedSet

<强>更新

尝试按如下所述创建Book对象:

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