Я новичок в разработке iOS, можете ли вы помочь мне с ошибкой. заранее благодарю.
uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Project1.'
let context = appdelegate.persistentContainer.viewContext
let proj = Project()
let arrProj = dic.object(forKey: "Projects") as! NSArray
for n in 0..<arrProj.count {
let subDic = arrProj.object(at: n) as! NSDictionary
let item = ProjectItem(dict: subDic)
proj.arrProjs.append( item )
let projects = NSEntityDescription.entity(forEntityName: "Projects", in: context)
projects?.setValue(item.Project, forKey: "project1")
projects?.setValue(item.Project2, forKey: "project2")
projects?.setValue(item.ID, forKey: "projectid")
projects?.setValue(item.radius, forKey: "radius")
projects?.setValue(item.GeofenceType, forKey: "geo_Type")
projects?.setValue(item.Geofence, forKey: "geofence")
projects?.setValue(item.Coordinates, forKey: "coordinates")
}
В проекте есть класс NSObject?
спасибо за ответ, я использую базу данных CoreData, экономя время, столкнувшись с этой проблемой, вы можете мне помочь
@YogeshPatel Project - это еще один класс, который по-прежнему работает нормально, но пусть проекты = NSEntityDescription.entity(forEntityName: «Проекты», в: контексте) проекты?.setValue(item.Project, forKey: «project1») единственная проблема
Пожалуйста, проверьте свои розетки в xib или раскадровке, убедитесь, что все правильно подключено. пожалуйста, дайте мне знать ?
Пожалуйста, сделайте точку останова исключения и скажите мне свой кроме кода, где вы падаете?
хорошо, я проверю это с помощью точки останова, еще раз спасибо
Его Пожалуйста, проверьте мой ответ, возможно, он будет вам полезен :)
Давайте продолжить обсуждение в чате.





Вы должны устанавливать значения в объекте NSManagedObject, а не в объекте NSEntityDescription
let entity = NSEntityDescription.entity(forEntityName: "Projects", in: context)
for n in 0..<arrProj.count {
let projects = NSManagedObject(entity: entity!, insertInto: context)
projects?.setValue(item.Project, forKey: "project1")
projects?.setValue(item.Project2, forKey: "project2")
//...
}
Спасибо, РаджешКумар, он работает нормально, может помочь мне еще раз, приложение все еще дает сбой Тема 3: сигнал SIGABRT, попробуйте context.save() при вызове
пожалуйста, проверьте мой ответ, используйте do catch для этого
@RajeshKumarR не показывает ошибку, журнал, каждые 5 минут я отправляю запрос на сервер, после получения сервера я сохраняю в локальной базе данных, первый раз работает попытка context.save (), позже показывает ошибку. можете вы помочь мне
@user11211835 user11211835 Используйте точку останова исключения и найдите место сбоя
@RajeshKumarR эта ошибка, показывающая ошибку: фатальная: невозможно восстановить после сбоя оптимистической блокировки. CoreData: ошибка: фатальная: невозможно восстановить после сбоя оптимистической блокировки.
@user11211835 user11211835 Эта ошибка возникает, когда несколько контекстов пытаются изменить один и тот же объект.
@RajeshKumarR У меня есть 4 таблицы после получения ответа сервера, который сохраняется в данных о местоположении с использованием того же контекста ( let context = appdelegate.persistentContainer.viewContext ), например, каждые 15 секунд повторяется этот тип, подскажите, пожалуйста, как решить эту проблему
@user11211835 user11211835 Не видя более подробной информации, я не могу найти проблему. Можете ли вы отправить проект на github или google drive?
Давайте продолжить обсуждение в чате.
Пожалуйста, проверьте это, используя запрос на вставку объекта, вы можете сохранить свои данные в основных данных.
let context = appdelegate.persistentContainer.viewContext
let projects = NSEntityDescription.insertNewObject(forEntityName: "Projects", into: context) as! Projects
projects.project1 = item.Project
projects.project2 = item.Project2
or
projects?.setValue(item.Project, forKey: "project1")
projects?.setValue(item.Project2, forKey: "project2")
projects?.setValue(item.ID, forKey: "projectid")
projects?.setValue(item.radius, forKey: "radius")
do{
try context.save()
}catch{
print("error")
}
Спасибо за доказательство решения этой проблемы, но это решение мне не подходит.
Добро пожаловать, мое решение работает для одной сущности. Я думаю, у вас есть массив, тогда ответ Раджешкумара работает на вас. если это единый объект, вам не нужно использовать заданное значение, вы можете напрямую получить проекты.проект1 или проект2. Спасибо
когда появляется эта ошибка?