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



我有一个问题使用CoreData

我有以下模型:

Entity:与多个Book有关系的Library实体:与一个图书馆有关系的书

我想添加一个书,当我设置它与图书馆的关系时,应用程序崩溃了。

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上崩溃了。图书馆=图书馆。然后我得到这个错误:

由于未捕获异常'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?
}

我建议您在一对多关系中使用NSOrderedSet。(如果你还没有那样做的话)。

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

你的Book类应该是

class Book{
    @NSManaged var library: Library
    ...
}
xcdatamodeldbookslibrary中的

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

library.books.addObject(book)

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

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

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

最新更新