Objective c 如何在nsuser-C中转义方括号

Objective c 如何在nsuser-C中转义方括号,objective-c,nsuserdefaults,square-bracket,Objective C,Nsuserdefaults,Square Bracket,使用以下代码提取参数时,它在大多数情况下都能正常工作,但在IPv6格式下不能正常工作。在第一次查看之后,似乎与[和]字符相关,我猜这对解析有特殊意义: 这是可行的(szServer包含1.2.3.4): ./myapp-地址“1.2.3.4” 这不起作用(szServer为nil): /myapp-地址“[2001::abc]” 不幸的是,我不能流利地使用objective-C,因此这可能是一个很小的问题,但查看NSUserDefaults或在internet上搜索“,”并不能(对我)了解这个主

使用以下代码提取参数时,它在大多数情况下都能正常工作,但在IPv6格式下不能正常工作。在第一次查看之后,似乎与
[
]
字符相关,我猜这对解析有特殊意义:

这是可行的(szServer包含1.2.3.4):

./myapp-地址“1.2.3.4”

这不起作用(szServer为nil):

/myapp-地址“[2001::abc]”

不幸的是,我不能流利地使用objective-C,因此这可能是一个很小的问题,但查看
NSUserDefaults
或在internet上搜索“,”并不能(对我)了解这个主题

int main(int argc, char *argv[])
{
    @autoreleasepool {
        NSUserDefaults *args = [NSUserDefaults standardUserDefaults];
        NSString * szServer = [args stringForKey:@"address"];

    }
}

我也希望你能对正在发生的事情做一些澄清。

如果你在你的论点中引用以下的引语,那就行了:

./myapp -address '"[2001::abc]"'
对于命令行
-
选项,该值被解释为一个旧式(NextStep era)属性列表,而不仅仅是一个逐字字符串

例如,这意味着可以通过这种方式传递数组和字典。如果将代码更改为使用
objectForKey:
而不是
stringForKey:
,它将从以下位置接收数组:

./myapp -address '("[2001::abc]")'
./myapp -address '{address="[2001::abc]";}'
或是一本字典:

./myapp -address '("[2001::abc]")'
./myapp -address '{address="[2001::abc]";}'
因为在解释这种格式时,各种字符可能是“特殊”的,所以如果字符串中有某个有限集合之外的字符,则必须引用字符串。显然,左方括号就是这样一个字符


如果需要找出给定参数所使用的语法,可以编写一个简单的程序,在其中构造一个包含所需属性列表对象的数组,并记录该数组。显然,结果将包括用于格式化数组的括号,但数组中的对象也将根据这种旧式格式的需要进行格式化。(如果您没有像数组一样将对象包装在集合中,那么它可能只是逐字写入自身,就像在记录
NSString
时一样)

如果您引用参数中的引号,它就会起作用:

./myapp -address '"[2001::abc]"'
对于命令行
-
选项,该值被解释为一个旧式(NextStep era)属性列表,而不仅仅是一个逐字字符串

例如,这意味着可以通过这种方式传递数组和字典。如果将代码更改为使用
objectForKey:
而不是
stringForKey:
,它将从以下位置接收数组:

./myapp -address '("[2001::abc]")'
./myapp -address '{address="[2001::abc]";}'
或是一本字典:

./myapp -address '("[2001::abc]")'
./myapp -address '{address="[2001::abc]";}'
因为在解释这种格式时,各种字符可能是“特殊”的,所以如果字符串中有某个有限集合之外的字符,则必须引用字符串。显然,左方括号就是这样一个字符

如果需要找出给定参数所使用的语法,可以编写一个简单的程序,在其中构造一个包含所需属性列表对象的数组,并记录该数组。显然,结果将包括用于格式化数组的括号,但数组中的对象也将根据这种旧式格式的需要进行格式化。(如果您没有像数组一样将对象包装在集合中,那么它可能只是一字不差地写自己,就像记录
NSString
时一样)