这可能是一个荒谬的问题,但我的视图控制器中有这样的方法:
[self registerProperty:self.currentUser];
在registerProperty:
的实现中我想得到字符串“currentUser”。
我这样做是因为我想观察视图控制器“currentUser”的属性,而不是实际的用户对象,所以我可以截取setter。
目前我正在检查Objective-C运行时是否有视图控制器的所有属性列表,并检查属性的值是否等于currentUser对象:
-(void)registerProperty:(id)property
{
for (NSString *propertyName in [self allPropertiesOfClass:[property class]])
if ([property isEqual:[self valueForKey:propertyName]])
NSLog(@"The property passed into the method is %@", propertyName);
}
这个问题是我可能有两个属性都包含相同的用户对象,在这种情况下,它们中的任何一个都会通过该测试。我怎么能解决这个问题?
答案 0 :(得分:2)
传入要观察其属性的对象,并将属性名称另外传递为字符串。也就是说,KVO -addObserver:...
方法的参数的镜像(子集)。