2016-04-21 2 views
0

Я использую NSFetchedResultsController для получения данных из CoreData и загрузки табличного представления с четырьмя разделами. Он отлично работает, когда приложение запускается в первый раз, загружая plist в CoreData, а затем извлекает записи для настройки ячеек в 4 разделах таблицы.FetchedResultsController значения не переписывают пользовательские значения инициализации NSManagedObject

Проблема возникает, когда я перезапускаю приложение, значения инициализации из класса появляются, чтобы перезаписать значения, которые, как я думал/думал, были сохранены в основных данных. Значения, которые не инициализируются классом, успешно загружаются NSFetchedResultsController.

Например, существует значение tableSection для определения разделов таблицы. При загрузке таблицы для в первый раз, он имеет четыре раздела:

enter image description here

НО, если я снова запустить приложение, есть только 1 значение tableSection, предполагаемое «Мои записи» (значение по умолчанию когда пользователь впервые создает запись):

enter image description here

Я не уверен, но я думаю, это происходит, когда я устанавливаю ячейки ...

func configureCell(cell: UITableViewCell, indexPath: NSIndexPath) 
{ 
    let record = fetchedResultsController.objectAtIndexPath(indexPath) as! Record ...} 

Похоже, что при запуске настраиваемого класса значения init присваиваются и никогда не перезаписываются значениями, которые, как я думал, были бы в файле fetchedResultsContainer. Все, что не дано значение пользовательского класса инициализации, как текст и изображения, присваиваются значения из fetchedResultsController:

class Record: NSManagedObject 
{ 
    override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) 
    { 
     super.init(entity: entity, insertIntoManagedObjectContext: context) 
     let randomBit = String(arc4random_uniform(100)) 
     iD = NSDate().toIDTimeDateString() + "-" + randomBit + "OtR" 

     believers = 0 
     deviceTime = NSDate() 
     doubters = 0 
     eventTimeStarted = NSDate() 
     eventTimeEnded = NSDate() 
     featureImageIndex = 0 
     coreLocationUsed = 0 
     photoTaken = 0 
     tableSection = "My Records" 
     timeRecorded = deviceTime 
     validationScore = 0 
    } 
} 

Как создать экземпляр «Записи» в пути, который перепишет значения инициализации с данные из файла fetchedResultsController? (если это моя проблема)

ответ

1

Не устанавливайте значения для NSManagedObject в методе init. A NSManagedObject заселяется после вызова 10. Если вам нужно переопределить значения, сделайте это в методах awakeFromFetch или awakeFromInsert.

Я бы настоятельно рекомендовал рассмотреть вопрос о том, что нужно переопределить Core Data Programming Guide.

+0

О, да, вам не рекомендуется переопределять initWithEntity: insertIntoManagedObjectContext: и описание. Если описание вызывает ошибку во время операции отладки, результаты могут быть непредсказуемыми. Обычно вы не должны переопределять методы кодирования значения ключа, такие как valueForKey: и setValue: forKeyPath :. Понял, спасибо. – DrWhat

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