2016-08-23 3 views
-2

У меня проблема с использованием CoreData.Ошибка CoreData при добавлении нового объекта с отношениями

я следующая модель:

Entity: библиотека с отношением ко многие книги Entity: Книга с отношением к одной библиотеке

Я пытаюсь добавить книгу и когда я установил его отношение к библиотеке, приложение падает.

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 =. Затем я получаю эту ошибку:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an 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

Pablo, было бы неплохо повторно отправить этот вопрос и правильно загрузить скриншоты. –

+0

Вы уверены, что объявили «библиотеку» как отношения «один ко многим», а не «многие-к-одному» или «многие ко многим»? –

+0

удалите приложение после установки его отношений, очистите и затем создайте проект. – Himanshu

ответ

1

Я предлагаю вам использовать NSOrderedSet для отношений один-ко-многим. (Если вы не сделаете этого).

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

вашей книги класс должен быть

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

где книги и библиотека в xcdatamodeld должно быть название отношений между моделями. Другое дело, отношения должны быть обратными в вашем случае. Наконец, я предлагаю вам установить:

library.books.addObject(book)

, но для этого вам нужно использовать NSMutableOrderedSet вместо этого NSOrderedSet

UPDATE

Try создать объект книги как описано ниже:

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

спасибо, я изменил и сделал упорядоченный набор, как вы предложили, но я все еще получаю ошибку – ppablo

+0

Я отредактировал свой ответ – ciccioska

+0

спасибо в другой раз, я попробую это сразу – ppablo

Смежные вопросы