swift - 如何从CoreData获取值

标签 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...

我认为当我为下一个属性设置Value时 - 它会创建新的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(entity:insertIntoManagedObjectContext:) 创建一个新对象。

您可能会混淆对象 ID 获取请求的 entityName,但事实并非如此。它指的是对象类型。如果您想跟踪该类型的单个对象,您可能应该向该对象添加一个标识符属性(例如 timerID)或使用 NSManagedObject对象ID

关于swift - 如何从CoreData获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35699838/

相关文章:

ios - 在 UIPageViewControllers 中预加载所有 UIViewControllers (Swift)

swift - 可用于保存CKServerChangeToken的CoreData类型是什么?

ios - 核心数据如何从实体中检索列

iphone - 核心数据应用程序在 iPhone 设备中崩溃

ios - 如何正确地子类化从 Swift 中的 xib 加载的 View 类?

ios - 小时:minutes:seconds in Date Picker swift怎么过

ios - 从 AppDelegate 遍历到其他 Controller

Swift 将日期秒舍入为零

core-data - didChangeSection : event for iOS 8+ NSFetchedResultsController? 中是否需要 "NSFetchedResultsChangeMove"和 "NSFetchedResultsChangeUpdate"

iphone - 重命名应用程序后,Core Data 出现问题?