IOS - ManagedObjectContext равен нулю в быстрых CoreData

Я сталкиваюсь с этой проблемой, когда пытаюсь сохранить простую строку в 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")

Это код из моего проекта, который до вчерашнего дня работал нормально. Интересно, что только что произошло. Внезапно он начинает показывать ту ошибку, о которой я упоминал выше.

Вещи, которые я пытался найти в проблеме:

  1. Если я запускаю свой проект на симуляторе, данные сохраняются (отлично работает).
  2. Использование того же кода в другом проекте отлично работает как в симуляторах, так и в устройстве.
  3. Пытался удалить предыдущее приложение сборки и снова его запустил. (тот же результат)

Вещи, которые я нашел:

  1. Контекст ManagedObject равен нулю, когда я запускаю код на устройстве, но он не равен нулю, когда я запускаю его на симуляторе (таким образом, он отлично работает на симуляторе).
  2. Контекст ManagedObject равен нулю, только когда я запускаю код из своего проекта (отлично работает как в симуляторе, так и на устройстве, если я запускаю код в другом проекте)

Помогите мне с этой странной проблемой.

Я использую Xcode 9.4.1 Swift: 4.1

Заранее спасибо.

Привет, во-первых, не лучшая идея иметь атрибут с именем name :) Я думаю, что это может быть какое-то пространственное слово. Также при вызове saveName ??? Может быть, контекст не инициализирован, если вы позвонили слишком рано.

m1sh0 13.09.2018 10:15

@ m1sh0 Атрибут name вполне подойдет. Классы NSManagedObject инкапсулируют данные. Нет причин менять это.

vadian 13.09.2018 10:24

Проверьте свой стек CoreData. Если настройка верна, контекст не должен быть nil

vadian 13.09.2018 10:25

@vadian - Все настроено нормально. Та же процедура в другом проекте работает нормально.

Tester 13.09.2018 10:28

Вы переименовали свою модель? Дважды проверьте правильность названия модели для постоянного контейнера.

Joakim Danielson 13.09.2018 10:32

@vadian причина, по которой я спрашиваю об имени атрибута, находится здесь: developer.apple.com/documentation/coredata/… например, вы не можете использовать описание в качестве имени атрибута.

m1sh0 13.09.2018 10:35

@vadian. Я уверен, что с атрибутом «имя» это не имеет значения. Даже после изменения имени атрибута возникает такая же ошибка.

Tester 13.09.2018 11:10

@Tester Определенно не имеет значения. Я использую name во многих проектах.

vadian 13.09.2018 11:14

@Tester, поскольку у нас до сих пор нет ответа, я думаю, нам следует прояснить основную причину здесь. В вашей функции saveName, с целью демонстрации проблемы, последняя половина кода, начинающаяся с let entity =, не нужна. Я имею в виду, что если вы удалите эту последнюю половину кода, ветвь print("s") будет выполнена. И в этом проблема. Верный? Без контекста управляемого объекта любой код, требующий контекста управляемого объекта, завершится ошибкой.

Jerry Krinock 13.09.2018 15:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
626
1

Ответы 1

Это наиболее частая проблема, с которой сталкиваются в Core Data. В моем случае я просто создал модель данных, и она сработала. Спасибо за обсуждения в разделе комментариев.

Другие вопросы по теме