Я пытаюсь реализовать CoreData с моим существующим быстрым проектом. Я следовал this tutorial и реализовал его с помощью UITableView.Swift: Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: «Имя сущности не должно быть nil».
Данные становятся доступными для модели данных (с другого контроллера представления), когда я извлекаю данные модели данных (в другом контроллере представления).
Проблема
Переход к View Controller с UITableView, показывает данные из модели данных один раз. Нажатие на Tableview или сдвинув ее вверх или вниз, в результате чего приложения к сбою с ошибкой
Нагрузочного приложением из-за неперехваченное исключение «NSInvalidArgumentException», причина: "Название объекта не должно быть нулевым.
Функция для экономии записи:
func saveData(date: String, usr : String, piid: String, healthD:String, temp:String, humd:String) {
//1
let managedContext = DataController().managedObjectContext
//2
let entity = NSEntityDescription.entityForName("Hygeine",
inManagedObjectContext:managedContext)
let health = NSManagedObject(entity: entity!,
insertIntoManagedObjectContext: managedContext)
//3
health.setValue(date, forKey: "date")
health.setValue(healthD, forKey: "health")
health.setValue(temp, forKey: "temp")
health.setValue(humd, forKey: "humd")
health.setValue(piid, forKey: "pi_id")
health.setValue(usr, forKey: "usr")
//4
do {
try managedContext.save()
//5
healthData.append(health)
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
ViewWillAppear для ViewController с UITableView:
override func viewWillAppear(animated: Bool) {
let managedContext = DataController().managedObjectContext
//2
let fetchRequest = NSFetchRequest(entityName: "Hygeine")
//3
do {
let results =
try managedContext.executeFetchRequest(fetchRequest)
healthData = results as! [NSManagedObject]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}
Есть много решения Objective-C к этой проблеме, но как решить его в Swift 2. Что я здесь делаю неправильно?
Вы когда-нибудь рассматривали использование контроллера NSFetchedResults и его делегатов вместо массива ??? Это решит вашу проблему, я верю :) –
Можете ли вы предложить мне учебник, поскольку я новичок в разработке iOS? @SandeepBhandari –
Я прошел этот учебник четыре года назад :) так было в объективе c :) https://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use- nsfetchedresultscontroller Взгляните на это очень красиво объяснили :) большинство методов в swift одинаковы :) так что не должно быть никаких проблем, чтобы справиться :) –