我有2個對象,AddressBook和AddressCard。該地址卡的屬性名稱,電子郵件,&生日。 AddressBook具有將字符串作爲參數的查找方法,並且搜索每個添加的AddressCard進行匹配。在這個查找方法中,我想要在AddressCards中搜索每個字段的NSArray。然後遍歷每個AddressBook條目測試數組中的每個字段以匹配查找的參數。問題是我不知道如何使用字符串動態訪問對象屬性 - Objective-C中可能會這樣做,還是應該嘗試以不同的方式執行此操作?我意識到我可以使用IF語句,但那不是一個可擴展的解決方案。使用屬性名稱中的字符串動態訪問對象屬性Objective-C
繼承人我查詢方法:
-(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;
}
任何意見或建議表示讚賞,謝謝!
您正在泄漏'fields'和'fieldName'。實際上,你可以使用'NSString * fieldName = [field objectAtIndex:i];'。您應該執行** Build and Analyze **。 – dreamlax 2010-10-18 20:57:39
上面不會編譯 - n應該是fieldName - 當我複製/粘貼時,我改變了它,但是謝謝你是正確的字段泄漏。 :-) – 2010-10-18 21:04:08