我有一个问题使用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
...
}
xcdatamodeld
中books和library中的应该是模型之间关系的名称。另一件事,在你的情况下,关系必须是相反的。最后我建议你设置:
library.books.addObject(book)
但是要做到这一点,你需要使用NSMutableOrderedSet而不是NSOrderedSet
尝试如下所述创建Book对象:
let book: Book = NSManagedObject(entity: bookDescription, insertIntoManagedObjectContext: context) as! Book