Swift 如何从CoreData中获取值

Swift 如何从CoreData中获取值,swift,core-data,Swift,Core Data,我正在使用下一个代码执行提取请求- let fetchRequest = NSFetchRequest(entityName: "TimerEntity") let managedObjectContext = appDel.managedObjectContext fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType do { let result = try managedObjectContex

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

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

我认为,当我为下一个属性设置值时,它会创建新的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)
 }

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


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

是否为do-while循环?看起来不完整。@Bhumit我只是一个开始。如果在请求时查询集
fetchLimit
中只需要一个结果,那么这就是do{}catch{}。选择要在同一请求上使用谓词查询的对象。我不确定您的问题是否从您编写的内容中明确。你在处理什么问题?@JorisKluivers我需要在同一个json中显示更改,而不是在下一个json中。例如,如果我将为第二个属性设置新值,而我在第一个属性中已经有值,那么我需要在同一个jsonoh中显示它们,谢谢,@JorisKluivers!你节省了我很多时间!我知道我要求很多,但你能给我一个更新现有值的例子吗?保存第一个对象时,在对象上设置一个唯一标识符:
timer.setValue(nsuid().UUIDString,forKey:“timerID”)
。然后在获取请求中使用谓词查询对象:
NSPredicate(格式:“timerID==%@”,timerID)
,但我不建议直接使用
NSManagedObject
setValue
。您可以为计时器对象创建托管对象子类。查看
Editor->创建NSManagedObject子类
,这样您就可以使用
timer.timerID=..
设置属性了,谢谢!你真棒!