Как сохранить ссылку, а затем использовать 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 на самом деле имеет.

Другие вопросы по тегам