如何从CoreData获取值

时间:2016-02-29 12:40:51

标签: swift core-data

我正在使用下一个代码来执行获取请求 -

let fetchRequest = NSFetchRequest(entityName: "TimerEntity")
let managedObjectContext = appDel.managedObjectContext
fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType

do {
  let result = try managedObjectContext.executeFetchRequest(fetchRequest)
  if result.count > 0 {
    print(result)
}
} catch let error as NSError {
  print(error.localizedDescription)
}

但是,当我打印它时,我会在调试区域中得到它 -

[{
    first = 0;
    second = 3657;
    third = 0;
    fourth = 0;
}, {
    first = 0;
    second = 0;
    third = 0;
    fourth = 653;
}]

在为第四个键设置值之前,我只在日志中打印了第一部分。 我究竟做错了什么?我只需要一个JSON就可以使用它

... UPD1

我认为当我为下一个属性设置setValue时,它会创建新的json。但为什么?所有这些属性都在同一个实体中。

... UPD2

设置值的代码

 let managedObjectContext = appDel.managedObjectContext
 let entity = NSEntityDescription.entityForName("TimerEntity", inManagedObjectContext: managedObjectContext)
 let timerEntity = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedObjectContext)

 timerEntity.setValue(seconds+(minutes*60)+(hours*3600), forKey: "second")

 do {
   try managedObjectContext.save()
 } catch let error as NSError {
   print(error.localizedDescription)
 }

1 个答案:

答案 0 :(得分:0)

在您发布的更新实体属性的代码中,您没有更新现有对象,而是使用NSManagedObject(entity:insertIntoManagedObjectContext:)创建新对象。

您可能会将entityName混淆为对象ID的获取请求,而不是。它指的是对象类型。如果要跟踪该类型的单个对象,您应该向对象添加标识符属性(类似timerID)或使用NSManagedObject的{​​{1}}。