首页 文章

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

提问于
浏览
-2

我在使用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 回答

  • 1

    我建议你使用 NSOrderedSet 作为一对多的关系 . (如果你没有这样做) .

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

    你的书课应该是

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

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

    library.books.addObject(book)

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

    UPDATE

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

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

相关问题