1

这可能是一个荒谬的问题,但我的视图控制器中有这样的方法:

[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);
}

这样做的问题是我可能有两个属性都包含相同的用户对象,在这种情况下,它们中的任何一个都会通过该测试。我该如何解决这个问题?

4

1 回答 1

2

传入要观察其属性的对象,并分别将属性名称作为字符串传入。也就是说,镜像 KVO-addObserver:...方法的参数(子集)。

于 2013-02-17T04:39:45.403 回答