使用Objective-C中具有属性名称的字符串动态访问对象属性

时间:2010-10-18 20:47:01

标签: objective-c

我有2个对象,AddressBook和AddressCard。 AddressCard有属性名称,电子邮件和&生日。 AddressBook有一个查找方法,它以字符串作为参数,并在每个添加的AddressCard中搜索匹配项。在这个查找方法中,我想要在AddressCards中搜索每个字段的NSArray。然后循环遍历每个AddressBook条目测试我的数组中的每个字段,以匹配查找的参数。问题是我不知道如何使用字符串动态访问对象属性 - 这在Objective-C中是否可行,或者我应该尝试以不同的方式执行此操作?我意识到我可以使用IF语句,但这不是一个可扩展的解决方案。

继承我的查询方法:

-(AddressCard *)lookup:(NSString *)aName
{
    NSArray *fields = [[NSArray alloc] initWithObjects:@"name",@"email",@"birthday",nil];
    BOOL STATUS = NO;
    for(AddressCard *entry in book)
    {

        for(int i = 0; i < [fields count]; i++)
        {
            NSString *fieldName = [[NSString alloc] initWithString:[fields objectAtIndex:i]];
            NSRange range = [[entry fieldName]  rangeOfString:aName];

            if(range.location != NSNotFound)//Important to not directly test the NSRange struct, but one of its properties(BAD_ACCESS)
            {
                NSLog(@"'%@' found in field:%@ at range:%i,%i",aName,fieldName,range.location,range.length);
                STATUS = YES;
                return entry;
            }
            [n release];
        }

    }
    if(!STATUS)
        NSLog(@"'%@' not found in %@ address book",aName, bookName);

    return nil;
}

感谢任何想法或建议,谢谢!

1 个答案:

答案 0 :(得分:4)

您要查找的方法是valueForKey:

NSRange range = [[entry valueForKey:fieldName]  rangeOfString:aName];