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 小部件中的代码折叠?