使用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?
}
答案 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