"Unstring" объект Objective-C? - PullRequest
       1

"Unstring" объект Objective-C?

1 голос
/ 13 октября 2011

Я работаю над инструментом командной строки, который запускает метод

- [NSMutableDictionary setObject:(id)object forKey:(NSString *)key]

Значение, которое я хочу передать как object, является содержимым строки argv[4] ... Таким образом, пользователь наберет:

mytool arg1 arg2 arg3 [NSString stringWithFormat:@"asd"]

Тем не менее, обычный argv[4], очевидно, является char*, поэтому я не могу добавить это как object.

Есть ли способ превратить эту строку с объектом в качестве его содержимого в простой объект, чтобы я мог передать ее описанным выше методом?

Бытие: Превратить "[NSString stringWithFormat:@"asd"]" в [NSString stringWithFormat:@"asd"]?

Примечание: это относится к любому объекту Objective-C, поэтому я также мог бы передать как argv[4] что-то вроде [NSArray arrayWithObjects:@"obj1", nil].

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 13 октября 2011

В общем, нет.За исключением написания собственного интерпретатора или взятия строки и ее запуска через компилятор, не существует обобщенного способа преобразования строки символов, содержащей произвольное выражение Objective-C, в значение этого выражения.

Теперь, если вы ограничитеОперация специально для

"[" <ClassName> <MethodName>":"<LiteralParameter> "]"

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

1 голос
/ 13 октября 2011

Вот краткий пример преобразования строк C в классы и селекторы во время выполнения.

// I added arg5 and arg6 for the example
// mytool arg1 arg2 arg3 NSString stringWithFormat: asd
NSString *className = [[NSString alloc] initWithUTF8String:arg4];
NSString *selectorName = [[NSString alloc] initWithUTF8String:arg5];
NSString *argument = [[NSString alloc] initWithUTF8String:arg6];
Class myClass = NSClassFromString(className);
SEL mySelector = NSSelectorFromString(selectorName);

// If arg5 is a class method
[myClass performSelector:mySelector withObject:argument];
// or if arg5 is an instance method
id instance = [[myClass alloc] init];
[instance performSelector:mySelector withObject:argument];

Это простой пример с тремя токенами: NSString, stringWithFormat: и одним аргументом. Чтобы обрабатывать более сложные случаи, вам нужно написать свой собственный анализатор строк. Тем не менее, он показывает некоторые возможности.

0 голосов
/ 13 октября 2011

Вы можете использовать этот метод экземпляра NSString -(id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding, который преобразует вашу строку C String в объект NSString, а затем добавляет в NSMutableDictionary

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...