【问题标题】:Display Attributes from Core Data ManagedObjectContext显示来自 Core Data ManagedObjectContext 的属性
【发布时间】:2014-12-05 08:21:29
【问题描述】:
我正在使用 Swift 学习 Core Data,我想查看我的 ManagedObjectContext 中当前保存的内容。 viewDidLoad() 包含println(managedObjectContext!),它会向控制台输出类似<NSManagedObjectContext: 0x1701f8500> 的内容。
如何查看我的 LogItem 的实际属性是什么?
谢谢
【问题讨论】:
标签:
ios
xcode
debugging
core-data
swift
【解决方案1】:
未保存托管对象在 NSManagedObjectContext。它们保存在持久存储中(如 SQLite 数据库)。 NSManagedObjectContext 用于将托管对象从持久存储加载到内存中并对其进行更改。然后,您要么将更改保存回持久存储区,要么丢弃它们。
如果您想将托管对象(名为 YourEntity 的实体的实例)从持久存储加载到 NSManagedObjectContext,请使用 NSFetchRequest:
let fetchRequest = NSFetchRequest(entityName: "YourEntity")
if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) {
println(fetchResults);
}
如果要查看当前加载到 NSManagedObjectContext 中的对象,可以使用registeredObjects 方法。如果您只想查看更新/插入/删除的对象,可以使用以下方法,称为:updatedObjects、insertedObjects、deletedObjects。
【解决方案2】:
_NSManagedObjectContext_ 通过将这些对象实际加载到同一上下文下的内存中来管理_NSManagedObjects_。因此,如果您想显示您的对象模型所包含的内容,那么您可以访问 managedObjectContext 的_registeredObjects_ 属性。但请记住,它只会列出/所有已加载到上下文的对象。
println(managedObjectContext!.registeredObjects);
【解决方案3】:
您可以将托管对象上下文视为处理模型对象的工作台。您加载它们,操作它们,然后将它们保存在该工作台上。加载和保存由持久存储协调器进行调解。
let fetchRequest = NSFetchRequest(entityName: "Entity")
if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [Entity] {
for info in fetchResults {
println(info.valueForKey("attribute"));
}
}