将 NSManagedObject 子类化 Core Data 对象打印到控制台在 Swift 中返回空行

Posted

技术标签:

【中文标题】将 NSManagedObject 子类化 Core Data 对象打印到控制台在 Swift 中返回空行【英文标题】:Printing NSManagedObject subclassed Core Data object to console returns empty line in Swift 【发布时间】:2014-12-23 08:03:42 【问题描述】:

我正在使用 Core Data 开发一个 Swift 应用程序。我创建了我的*.xcdatamodeld 文件并创建了一个NSManagedObject Subclass (Editor -> Create NSManagedObject Subclass...)。

一切正常,除非我尝试println 该类的实例化对象(我们称之为Person)控制台打印空白或简单地打印Optional()(如果未解包)。

我尝试通过类扩展添加DebugPrintablePrintable,但没有成功。

这是 CoreData 对象的已知限制吗?我错过了什么?

为了清楚起见添加代码:

/// Person.swift (auto-generated by Xcode)
class Person: NSManagedObject 

   @NSManaged var firstname: String
   @NSManaged var lastname: String


我的扩展:

/// Person+Helpers.swift
extension Person : Printable, DebugPrintable 
   override var description : String 
       return "test"
   

   override var debugDescription : String 
       return "debug test"
   

控制台打印空行,或者在Person对象数组的情况下,它只是打印[ , , , , ]

【问题讨论】:

请显示实例化对象的代码。 我在 Xcode 6.1 (6A1052d) 上看到了同样的情况。我创建了一个要点来证明我如何获取对象并不重要:gist.github.com/bgrace/021f55a9f160685e2433 — 我很想知道 NSManagedObject 上的 Printable 是否适用于任何人。 我刚刚也遇到了这个问题,试图将 NSManagedObject 子类的数组转换为字符串以保存在错误报告中。现在我这样做是一种解决方法: var stringArray = [String]() for subclass in arrayOfSubclass stringArray.append(subclass.name) 然后使用 stringArray.description 来获取连接的字符串。 如何初始化 Core Data?你在使用视图控制器容器吗? 我也遇到过同样的问题,虽然它不是空白 - 打印为空白.. 【参考方案1】:

你可以用这个:

NSLog("My managed object: %@", managedObject)

由于某种原因,它不会使用println 输出,但NSLog 工作正常。

【讨论】:

以上是关于将 NSManagedObject 子类化 Core Data 对象打印到控制台在 Swift 中返回空行的主要内容,如果未能解决你的问题,请参考以下文章

NSLog'd 时子类化的 NSManagedObject 不调用描述

将 NSManagedObject 子类化 Core Data 对象打印到控制台在 Swift 中返回空行

子类化一个 NSManagedObject 子类

我可以向 NSManagedObject 的子类的子类添加属性吗?

除了在 *.h 文件中的接口中声明之外,如何使从 NSManagedObject 子类化的对象的选择器对编译器可见?

NSManagedObject 子类导致 NSInvalidArgumentException