Как я могу назвать функцию obj-c для вызова в данных XML - PullRequest
1 голос
/ 09 декабря 2010

Вопрос новичка здесь. Я хотел бы иметь возможность указать через данные (то есть файл XML) соответствующее сообщение Objective-C для отправки. Любой совет, если это возможно, или как я могу это сделать?

Следующая лучшая вещь, если я не смогу это сделать, - это какой-то способ создать объект карты, который бы коррелировал ключ (int) с функцией (я думаю, также селектор). Это возможно, если вышеперечисленное не так?

Если бы кто-то мог указать мне на учебник или пример кода в качестве ссылки, это было бы замечательно. Прямо сейчас я делаю вещи с большим заявлением переключателя, и мне это не нравится. (Я включаю идентификатор и в каждом случае явно вызываю метод, относящийся к конкретному идентификатору.)

1 Ответ

1 голос
/ 09 декабря 2010

Мне нравится, что вы задали этот вопрос;слишком часто я вижу заявление о набухании сатаны .Приятно видеть, что кто-то хочет вместо этого использовать таблицу функций.

Если вы согласны с использованием файла списка свойств (который обычно кодируется в XML), это действительно просто.

Просто создайте список свойств, где корневым элементом является словарь, который сопоставляет некоторые ключи с некоторыми селекторами.

Key               Type         Value
----------------------------------------------
Root              Dictionary
  firstKey        String       someSelector
  secondKey       String       anotherSelector

Загрузите содержимое списка свойств в NSDictionary:

id path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"];
id dict = [NSDictionary dictionaryWithContentsOfFile:path];

SEL selector = NSSelectorFromString([dict objectForKey:@"firstKey"]);
if ([someObject respondsToSelector:selector]) {
    [someObject performSelector:selector];
}

Конечно, вы захотите преобразовать эту логику в соответствующий метод и, возможно, кэшировать список свойств как переменную экземпляра.

Примечание: лично я считаю, что лучше просто поместитьэта таблица функций встроена;списки свойств это круто, но я не уверен, что это очень полезно в этом случае.Кроме того, если вы хорошо владеете Objective-C ++, std::map позволит вам избежать неупаковки и разворачивания селекторов в NSString объектах и ​​т. Д.

...