我有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;
}
感谢任何想法或建议,谢谢!
答案 0 :(得分:4)
您要查找的方法是valueForKey:
NSRange range = [[entry valueForKey:fieldName] rangeOfString:aName];