2016-12-11 1 views
0

Это мой код:Сбой при хранении в Core Data

func storingMessage() { 

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

let context = appDelegate.persistentContainer.viewContext 

let adagio = NSEntityDescription.insertNewObject(forEntityName: "Friend", into: context) 
adagio.setValue("Adagio", forKey: "name") 
adagio.setValue("adagio", forKey: "profileImageName") 

let messageAdagio = NSEntityDescription.insertNewObject(forEntityName: "Message", into: context) 
messageAdagio.setValue("adagio", forKey: "friend") 
messageAdagio.setValue("This is boring....", forKey: "text") 
messageAdagio.setValue(NSDate(), forKey: "date") 

let glaive = NSEntityDescription.insertNewObject(forEntityName: "Friend", into: context) 
glaive.setValue("Glaive", forKey: "name") 
glaive.setValue("glaive", forKey: "profileImageName") 

let messageGlaive = NSEntityDescription.insertNewObject(forEntityName: "Message", into: context) 
messageGlaive.setValue("glaive", forKey: "friend") 
messageGlaive.setValue("I will cut you to pieces", forKey: "text") 
messageGlaive.setValue(NSDate(), forKey: "date") 

do { 

    try context.save() 
    print("SAVED!!!!") 

} catch let err { 

    print(err) 

} 

} 

И это ошибка:

-[Swift._NSContiguousString managedObjectContext]: unrecognized selector sent to instance 0x600000051040 2016-12-11 10:22:34.834 Chat App - Core Data Demo[21356:1755677] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Swift._NSContiguousString managedObjectContext]: unrecognized selector sent to instance 0x600000051040'

Я не могу понять, что происходит. У меня есть 2 сущности, друг и сообщение. У друга есть имя и profileImageName как атрибуты строк, а Message - текст и дата, и оба они имеют обратную связь. Это столько же данных, сколько я могу дать вам, ребята. Пожалуйста помоги.

+1

Моя догадка является 'viewcontext' Getter делает что-то оно не должно. Поместите там некоторые перерывы, чтобы выяснить, почему вы можете получить строку в этом коде. –

ответ

0
let adagio = NSEntityDescription.insertNewObject(forEntityName: "Friend", into: context) as! Friend 
     adagio.name = "Adagio" 
     adagio.profileImageName = "adagio_photo" 

     //setting up the message as a Message() type and filling in the parameters 
     let messageAdagio = NSEntityDescription.insertNewObject(forEntityName: "Message", into: context) as! Message 
     messageAdagio.friend = adagio 
     messageAdagio.text = "This is boring...." 
     messageAdagio.date = NSDate() 

Это сработало. Так что разница вместо .setValue() Я просто использовал атрибуты моделей. Я не знаю, какая разница, но после исследований и исследований ... это тот, который сработал. Я думаю, структура или тип данных не соответствует каким-то образом ...

+1

Существует ** огромная ** разница. Ваш старый код 'messageAdagio.setValue (« adagio », forKey:« friend »)' пытается присвоить 'String' свойству' friend'. В коде, опубликованном в этом ответе, вы назначаете объект 'Friend' для свойства' friend'. Использование 'setValue' будет работать с' messageAdagio.setValue (adagio, forKey: "friend") '. – rmaddy

1

Не использовать низкоуровневые функции, как SetValue (: forKey :) для NSManagedObject подклассов.

Проблема здесь:

messageAdagio.setValue("adagio", forKey: "friend") 
... 
messageGlaive.setValue("glaive", forKey: "friend") 

Вы пытаетесь установить значение типа Струнный-х поле типа объекта друзья

+0

не будет ли это ошибка? Я понимаю, что вы имеете в виду, но это не вызвало у меня ошибки. –

+0

Да, это не так. На самом деле, вы можете сделать сумасшедшие вещи с помощью NSManagedObjects в некотором NSManagedObjectContext. Как создание сумасшедших отношений, установив * nil * в необязательные поля, установив отрицательные значения на два поля, которые должны быть положительной причиной NSManagedModel. – Simbos

+0

Но все необходимые проверки будут выполняться только при сохранении/сохранении/объединении контекста – Simbos

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

  • Нет связанных вопросов^_^