2017-01-27 3 views
0

Я извлекаю данные из таблицы coredata STUDENT и отображает все имена студентов в tableview с помощью Array. и после выбора любого из имени студента (нажмите на tableViewCell), он получает полную информацию о Студенте из другой таблицы и отображает в следующем контроллере представления профиля.Доступ к coredata `faults` делает все свойства coredata NIL в viewController

Теперь проблема в контроллере просмотра профиля. Я открываю центр управления iPhone (для включения Bluetooth/Wifi/Music и т. Д.), И после того, как я увольняю центр управления, все переменные становятся ничтожными, даже если я поп на предыдущий экран (который является списком всех имен учеников), он показывает пустую таблицу.

Когда я отлаживаю эту проблему, я обнаружил, что мой Student Array становится Nil во время контроля pop viewcontroller. Эта проблема возникает только при открытии лотка центра управления при использовании приложения, в противном случае он поддерживает все массивы и переменные, как он полагает.

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

Я не знаю, почему это происходит? Есть ли способ разрешить это? После открытия центра управления мне нужно снова установить все переменные? Есть ли какая-либо проблема сохранения состояния или что-то еще? Есть ли проблема, связанная с coredata?

Ошибка выглядит следующим образом:

5 elements 
     - 0 : <Student: 0x17468c670> (entity: Challenge; id: 0xd0000000665c0006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6551> ; data: <fault>) 
     - 1 : <Student: 0x17488b4f0> (entity: Challenge; id: 0xd000000066600006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6552> ; data: <fault>) 
     - 2 : <Student: 0x174887a80> (entity: Challenge; id: 0xd000000066640006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6553> ; data: <fault>) 
     - 3 : <Student: 0x17488b270> (entity: Challenge; id: 0xd000000066680006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6554> ; data: <fault>) 
     - 4 : <Student: 0x1746823f0> (entity: Challenge; id: 0xd0000000666c0006 <x-coredata://C8F37C3F-3153-4EA5-9914-0CEBEB5731E4/Challenge/p6555> ; data: <fault>) 

Здесь data оказывает <fault>, массив является содержит 5 объекта, но когда я пытаюсь получить доступ к этому свойству объекта, они равны нуль. Кажется, объект coredata становится пустым.

Я работаю в swift 3.0, Xcode 8. iOS 10.2. Ищите помощь, пожалуйста.

ответ

0

Fault - это функция coredata для управления использованием памяти.

Ошибка.

Если у вас есть доступ к свойству Student.data, основные данные будут получать запрос, а затем у вас будут все данные.

+0

Если я пытаюсь получить доступ к 'Student.name', он дает мне« nil ». Как я могу получить доступ к свойству '.data'. Я думаю, что это будет «нуль»? Есть ли проблема с 'Delete Rule' в объекте coredata? Я установил все табличные отношения как «nullify». –

+0

проверить это сообщение: https://code.tutsplus.com/tutorials/what-is-a-core-data-fault--cms-25157. Надеюсь, это поможет –

+0

У меня есть объяснение, которое вы пытаетесь объяснить, но как связать «ошибку» с исходными данными? Я также прочитал [Руководство по программированию Apple Coredata] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/FaultingandUniquing.html). Но не удалось найти решение. :(Например, если я перемещаю свое приложение в фоновом режиме и возвращая его на передний план, свойство coredata становится nil (т. Е. Ошибка). Тогда я не могу получить доступ к свойству. 'Student.name' всегда равен нулю. Если я перезагружу table, он показывает пустой стол. –

0

Вы держите на своем NSManagedObjectContext в объекте класса или сингла? Если нет, контекст управляемого объекта, поддерживающий объекты, будет освобожден, и ваши объекты не смогут восстановить данные в памяти. Центр управления, вероятно, вызывает давление памяти, чтобы автоматически вытеснять данные сущности.

0

Я нашел решение, в котором я переехал CoreData объект в объект класса. и теперь он автоматически сохраняет данные в объекте класса, поскольку это поведение по умолчанию в iOS. Спасибо за предложение всем.

0

Я работал с созданием отдельного класса модели. Так что теперь мне нужно получить доступ только к объекту класса, а не к объекту coredata. Это не точное решение, которое я искал, но это может быть и решение. Он работает отлично. Спасибо всем. !! :)