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=..
设置属性了,谢谢!你真棒!