Подтвердить что ты не робот

Swift 2, предупреждение: не удалось загрузить информацию класса Objective-C из dyld-общего кэша

Я нашел несколько вопросов по этой проблеме, но ни один из них не помог мне в моей проблеме. Я пытаюсь сохранить объект для основных данных с помощью этого кода (который отлично работал в Xcode 6 и Simulator...):

let fetchRequest = NSFetchRequest(entityName: "Patient")
let fetchedResults : [NSManagedObject]!
do {
    fetchedResults = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
    patienten = fetchedResults
}    catch {
    print("error")
}

Я добавил try-try-catch, когда начал работать над этим проектом в бета-версии Xcode 7 и физическом устройстве. Теперь, когда я нажимаю кнопку "Сохранить", этот фрагмент кода вызывается, приложение зависает, и я получаю следующее:

предупреждение: не удалось загрузить информацию класса Objective-C из dyld-общего кэша. Это значительно снизит качество информации о типе.

Снимок экрана

Кто-нибудь знает, где я ошибся?

4b9b3361

Ответ 1

Для тех, кто сталкивается с этим в будущем, я просто столкнулся с этой проблемой, и оказалось, что на самом деле я получаю переполнение стека из рекурсивной функции.

Очевидно, вызов setValue:forKey: в NSObject вызывает соответствующую функцию set[Key], где [Key] - это (заглавное) имя, которое вы передали в раздел forKey.

Итак, если у меня есть код, который выглядит следующим образом, он вызовет бесконечный цикл и сбой.

func setName(name: String) {
    self.setValue(name, forKey: "name")
}

Ответ 2

Выберите Product > Clean

У меня была аналогичная проблема. Я удалил приложение с устройства. Затем "Продукт- > Очистить" в меню XCode. Когда я снова запустил приложение, проблема была решена.

Ответ 3

Swift 3:

На самом деле эта проблема возникает часто, когда у вас есть какое-либо свойство во вводе, объявленное как тип NSError, и компилятор ожидает выход Error, поэтому изменение типа ввода на Error обычно решает эту проблему.

Ответ 4

Что помогло мне в аналогичной проблеме (xCode 7, Swift 2):

чтение этого вопроса

Или быстрее, не объясняя причины решения: просто напишите @objc(className) в NSManagedObjectSubclass, который был создан из вашего объекта CoreData (@objc(Patient) - в вашем случае).

Это решение (если проблема все еще появляется) не применима к xCode 7.1/Swift 2.1, поскольку способ генерации NSManagedObjectSubclasses был изменен.

Не забывайте про очистку вашего проекта (Product > Clean) и удаление приложения с вашего устройства/симулятора для замены хранилища CoreData на нем.

Ответ 5

let fetchRequest = NSFetchRequest(entityName: "Patient")

do {
  let fetchedResults = try managedObjectContext!.executeFetchRequest(fetchRequest)
  print("\(fetchedResults)")
} catch {
  print("error")
}

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

  • Проверьте, действительно ли создан ваш managedObjectContext.
  • Проверьте моделирование основных данных