我正在创建一个通用类别来isEqual
实现NSManagedObject
. 因为你不能覆盖我称之为托管对象的 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