如何在 CoreData 的 NSLog 中显示详细信息?建议我一个解决方案

Posted

技术标签:

【中文标题】如何在 CoreData 的 NSLog 中显示详细信息?建议我一个解决方案【英文标题】:How to show detailed info inside NSLog in CoreData? suggest me a solution 【发布时间】:2012-09-13 05:25:39 【问题描述】:

我正在使用 foliowin 函数来获取应用程序中的所有记录

-(NSArray*)recordsInTable:(NSString*)tableName andManageObjectContext:(NSManagedObjectContext *)manageObjContext

    NSError *error=nil;
    // **** log objects currently in database ****
    // create fetch object, this object fetch's the objects out of the database
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName: tableName inManagedObjectContext:manageObjContext];
    [fetchRequest setEntity:entity];
    NSArray *fetchedObjects = [manageObjContext executeFetchRequest:fetchRequest error:&error];
    return  fetchedObjects;

并使用以下代码获取记录

  NSArray *records=[dbAccessObj recordsInTable:@"Details" andManageObjectContext:managedObjectContext];
    NSLog(@"records %@",records);

我收到这样的日志

**records (
    "<Details: 0x76374b0> (entity: Details; id: 0x7636730 <x-coredata://CDEF0797-F141-47A7-902D-9689DCD90B83/Details/p1> ; data: <fault>)",
    "<Details: 0x7637770> (entity: Details; id: 0x7636740 <x-coredata://CDEF0797-F141-47A7-902D-9689DCD90B83/Details/p2> ; data: <fault>)",
    "<Details: 0x7637870> (entity: Details; id: 0x7636750 <x-coredata://CDEF0797-F141-47A7-902D-9689DCD90B83/Details/p3> ; data: <fault>)"
)**

但我想显示所有详细信息的日志,记录如下所示。我犯了什么错误?

**
    age = 11;
    fName = "firstName";
    lName = "lastname";
    sId = 4;
)**

【问题讨论】:

【参考方案1】:

您的代码没有错误。您在数组中看到的是“故障”。来自核心数据编程指南:

Faulting 是 Core Data 用来减少应用程序的一种机制 内存使用情况。

...故障是一个占位符对象,表示 尚未完全实现的托管对象,或集合 表示关系的对象。

...如果在某个阶段 访问故障对象的持久属性,然后访问 Core Data 自动检索对象的数据并初始化 对象。

executeFetchRequest: 返回一个故障数组(= 占位符对象)以节省内存。一旦您检索到对象的属性,该对象就会完全初始化,并且所有属性都在调试器中可见。

对于调试目的(仅限),您可以强制 Core Data 完全初始化数组中的所有对象

NSArray *allAges = [records valueForKey:@"age"];
NSLog(@"records %@",records);

【讨论】:

【参考方案2】:

我认为您可以使用 debugDescription。只需从调试命令行编写:

po [coreDataObject debugDescription];

它会给你详细的信息。

【讨论】:

以上是关于如何在 CoreData 的 NSLog 中显示详细信息?建议我一个解决方案的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIColor 转换为 HEX 并在 NSLog 中显示

CoreData 的数据持久性

我如何从 json 中取出值并在 NSLog 中显示它们

CoreData 反题

如何在 iOS 10 下查看我的 SDK 项目中的 NSLog

数据导入CoreData期间如何显示progressBar?