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

时间:2010-10-14 18:46:13

标签: objective-c core-data

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

每个实体都有一个从NSManagedObject中继承的类。

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

当我这样做时

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

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

- (NSString*) description

如果我发送,它会打电话:

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

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

尝试覆盖descriptionWithLocale:并查看是否会产生影响。

- (NSString *) descriptionWithLocale:(id) locale
{
    return @"my description";
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

将子类名称放回Xcode Coredata模型编辑器中的Entity Inspector中修复它。