Я сталкиваюсь с этой проблемой, когда пытаюсь сохранить простую строку в CoreData.
'+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'CurrentUser''
CoreData настроен нормально. И для продолжения я использую следующий код.
func saveName(name: String) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext
if context == nil {
print("s")
} else {
print("d")
}
let entity = NSEntityDescription.insertNewObject(forEntityName: "CurrentUser", into: context)
entity.setValue(name, forKey: "name")
do {
try context.save()
print("saved")
} catch {
print("error")
}
}
Звонок:
saveName("Edwin")
Это код из моего проекта, который до вчерашнего дня работал нормально. Интересно, что только что произошло. Внезапно он начинает показывать ту ошибку, о которой я упоминал выше.
Вещи, которые я пытался найти в проблеме:
Вещи, которые я нашел:
Помогите мне с этой странной проблемой.
Я использую Xcode 9.4.1 Swift: 4.1
Заранее спасибо.
@ m1sh0 Атрибут name
вполне подойдет. Классы NSManagedObject
инкапсулируют данные. Нет причин менять это.
Проверьте свой стек CoreData. Если настройка верна, контекст не должен быть nil
@vadian - Все настроено нормально. Та же процедура в другом проекте работает нормально.
Вы переименовали свою модель? Дважды проверьте правильность названия модели для постоянного контейнера.
@vadian причина, по которой я спрашиваю об имени атрибута, находится здесь: developer.apple.com/documentation/coredata/… например, вы не можете использовать описание в качестве имени атрибута.
@vadian. Я уверен, что с атрибутом «имя» это не имеет значения. Даже после изменения имени атрибута возникает такая же ошибка.
@Tester Определенно не имеет значения. Я использую name
во многих проектах.
@Tester, поскольку у нас до сих пор нет ответа, я думаю, нам следует прояснить основную причину здесь. В вашей функции saveName
, с целью демонстрации проблемы, последняя половина кода, начинающаяся с let entity =
, не нужна. Я имею в виду, что если вы удалите эту последнюю половину кода, ветвь print("s")
будет выполнена. И в этом проблема. Верный? Без контекста управляемого объекта любой код, требующий контекста управляемого объекта, завершится ошибкой.
Это наиболее частая проблема, с которой сталкиваются в Core Data. В моем случае я просто создал модель данных, и она сработала. Спасибо за обсуждения в разделе комментариев.
Привет, во-первых, не лучшая идея иметь атрибут с именем name :) Я думаю, что это может быть какое-то пространственное слово. Также при вызове saveName ??? Может быть, контекст не инициализирован, если вы позвонили слишком рано.