CoreData valueForKey issue on Xcode 13



我在客户端的应用程序中有一个问题,在NSManagedObject子类上调用valueForKey:当应用程序使用Xcode版本>= 13.x构建时,特定CoreData属性失败。对于某些属性,像这样的调用(Object将是NSManagedObject的子类,具有名为'propertyName'的属性):

Object *object = ....
[object valueForKey:@"propertyName"]

导致调用valueForUndefinedKey:,而不是返回属性的实际值。

当应用程序使用较早版本的Xcode(我已经尝试过12.5.1)构建时,它工作正常,值按预期返回,而无需调用valueForUndefinedKey:。

有人见过这样的行为吗?

如果有人遇到这个问题,我确实解决了。问题是项目以一种非常奇怪的方式重写了NSManagedObject的valueForKey:方法。基本上,它是这样的:

@interface NSManagedObject (Ext)
@end
@implementation NSManagedObject (Ext)
- (id)valueForKey:(id)key {
// do stuff
[super valueForKey:key];
}
@end

在Xcode 13和iOS 15之前,这似乎工作得很好(尽管这是一个非常糟糕的事情),但现在有不可预测的行为。解决方案是创建一个类,它是NSManagedObject的子类,在那个新类中重写那个方法,并使其他类成为那个新类的子类。

最新更新