【发布时间】:2013-04-29 05:54:17
【问题描述】:
我正在创建一个通用类别来为NSManagedObject 实现isEqual 功能。由于您无法在托管对象上覆盖 isEqual,因此我将其命名为 isExactlyTheSameAs。我使用 KVC 来访问我想要测试的 NSManagedObjects 上的任何属性。
我遇到的问题是,虽然它适用于只有属性的简单类。当我使用valueForKey 获取关系时,它会引发“与键的键值编码不兼容”错误。
有人知道如何让这种关系也适用于人际关系吗?
@implementation NSManagedObject (ExactlySame)
- (BOOL)isExactlyTheSameAs:(id)object
{
@autoreleasepool {
unsigned int count = 0;
objc_property_t *props = class_copyPropertyList([self class], &count);
for (int i = 0; i < count; i++) {
NSString *name = [NSString stringWithFormat:@"%s", property_getName(props[i])];
id value1 = [self valueForKey:name];
id value2 = [object valueForKey:name];
if ([value1 isKindOfClass:[NSSet class]]) {
for (id arrayValue1 in (NSSet *)value1) {
if ([arrayValue1 isKindOfClass:[NSManagedObject class]]) {
for (id arrayValue2 in (NSSet *)value2) {
if (![arrayValue2 isExactlyTheSameAs:arrayValue1]) {
return NO;
}
}
}
}
} else if ([value1 isKindOfClass:[NSString class]]) {
if (![value1 isEqualToString:value2]) {
return NO;
}
} else if ([value1 isKindOfClass:[NSNumber class]]) {
if (![value1 isEqualToNumber:value2]) {
return NO;
}
}
else if (value1 != value2) {
return NO;
}
}
return YES;
}
}
@end
【问题讨论】:
标签: iphone ios objective-c core-data