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

Posted

技术标签:

【中文标题】NSLog\'d 时子类化的 NSManagedObject 不调用描述【英文标题】:subclassed NSManagedObject does not call description when NSLog'dNSLog'd 时子类化的 NSManagedObject 不调用描述 【发布时间】:2010-10-14 18:46:12 【问题描述】:

我有一个数据模型,它有两个实体,关系为一对多。

每个实体都有一个从 NSManagedObject 子类化的类。

我得到一个实体的关系集,并在我枚举集合时将每个集合成员转换为特定的子类。

当我这样做时

NSLog(@"My Entity: %@", myEntityInstance);

它记录但不调用我的子类的方法:

- (NSString*) description

如果我发送它确实会调用:

NSLog(@"My Entity: %@", [myEntityInstance description]);

任何想法被称为什么以及为什么必须手动调用描述?

谢谢!

【问题讨论】:

【参考方案1】:

如果类实例响应descriptionWithLocale:,则NSLog 将使用它。虽然descriptionWithLocale: 没有出现在NSManagedObject 的实例方法列表中,但它仍有可能实现。

尝试覆盖descriptionWithLocale:,看看是否有不同。

- (NSString *) descriptionWithLocale:(id) locale

    return @"my description";

【讨论】:

【参考方案2】:

我从未见过。我不认为这是 NSManagedObject 行为。您可以在进行调用之前记录该类,以确保您的实例属于您认为的类。

【讨论】:

我也没见过这个。还应该注意的是,在实现-description 时必须非常小心,因为使用Core Data 属性会导致有时不希望的提取。【参考方案3】:

游戏可能晚了两年左右,但为了其他人的利益,我今晚遇到了这个问题。原因是,虽然我为我的实体创建了 NSManagedObject 子类,但 CoreData Modler 中的一个实体将其“类”设置回 NSManagedObject 而不是自定义子类。

在我的子类文件中放入 -description 并不重要,因为对象是作为 NSManagedObjects 而不是我的自定义子类从上下文中出来的。

将子类名称放回 Xcode Coredata 模型编辑器的实体检查器中修复了它。

【讨论】:

以上是关于NSLog'd 时子类化的 NSManagedObject 不调用描述的主要内容,如果未能解决你的问题,请参考以下文章

子类化的 UIView,当设置为 Storyboard 中的默认视图时,编译器无法识别而不进行强制转换

从 QPlainTextEdit 子类化的 Qt 小部件中的代码折叠?

win32 c++ 在没有子类化的编辑控件中检测“输入”?

NSManagedObject 的副本

如果 drawRect: 被覆盖,子类化的 UIView 显示黑色背景

是否可以在不子类化的情况下替换 UIWebView 中现有方法的主体