objective-c - "Unstring" Objective C 对象?

  显示原文与译文双语对照的内容
0 0

我正在处理一个命令行工具,它将运行该方法


- [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]

先谢谢了。

时间: 原作者:

0 0

下面是在运行时将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];

这是个简单的例子,有三个标记: NSStringstringWithFormat: 和一个参数。 要处理更复杂的情况,你需要编写自己的字符串解析器。 虽然它显示了一些可能性。

0 0

通常,编写解释器或者通过编译器运行字符串并没有将包含任意 objective-c 表达式的字符串。

现在,如果你将操作限定为

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

或者,你可以编写一个简单复杂的解释器,查找类名,解析文本,然后调用。 这可以推广到处理逗号分隔列表等,不需要太多困难。

原作者:
0 0

你可以使用这个NSString实例方法 -(id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding 将NSString字符串转换为对象,然后添加到 NSMutableDictionary

原作者:
...