Как сохранить ссылку, а затем использовать extern NSString const?
Я сделал список в виде словаря со словарными статьями, по одному для каждого ABRecord
свойство, которое я хочу использовать позже.
эти словари являются ключом / значением NSStrings
как это:kABEmailProperty/email
,
я хочу иметь возможность использовать распакованный список для сбора значений из указанного ABRecord
перечисляя распакованный словарь plist (предположим, что inRecord является ABRecord):
__block NSMutableArray *valueGroup = [[NSMutableArray alloc] init];
[self.propsDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSString *valueString = [inRecord valueForProperty:key];
if (valueString) {
NSDictionary *dict = [NSDictionary dictionaryWithObject:valueString forKey:obj];
[valueGroup addObject:dict];
}
}
}];
как правильно обратиться к ключу, чтобы он ABRecord
ссылка на глобальное свойство в ABGlobals.h
вместо строки, которая хранится в списке?
Я пытался использовать & ключ, и (id) ключ, и (void *) ключ, но на самом деле я просто вертелся вокруг.
Мне не удалось найти ответы на различные вопросы, касающиеся использования глобальных внешних ссылок, хотя это было информативно.
1 ответ
Если я вас правильно понимаю, у вас есть следующее:
NSString *foo = "kABEmailProperty";
И вы хотите иметь возможность сделать что-то вроде этого:
[inRecord valueForProperty:kABEmailProperty];
На основании значения foo. Правильный? Нет никакого способа сделать это напрямую, потому что имя "kABEmailProperty" не (легко) доступно во время выполнения; это просто имя во время компиляции.
Мое предложение было бы сделать словарь со всеми ключами в нем; что-то вроде этого:
NSDictionary *keys = [NSDictionary dictionaryWithObjectsAndKeys:kABEmailProperty, @"kABEmailProperty", kABOtherProperty, @"kABOtherProperty", ..., nil];
И тогда вы можете сделать что-то вроде этого:
[inRecord valueForProperty:[keys objectForKey:foo]];
т.е. сделать отображение из строки @"kABEmailProperty"
к значению, которое kABEmailProperty
на самом деле имеет.