带有stringByAppendingPathComponent的NSInvalidArgumentException

时间:2014-02-18 03:40:16

标签: ios

我有一个带字符串的bundel设置:version

在我的捆绑设置版本= 2.9.1

在我的项目中,如果我使用此代码,一切都很好:

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"ma/V_2.9.1/gma2/fixture_layers/ifocus.xml"];

如果我使用此代码:

NSString *path = [documentsDirectory stringByAppendingPathComponent:(@"ma/V_%@/gma2/fixture_layers/ifocus.xml", version)];

我有这个错误:

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UITextField length]:无法识别的选择器发送到实例0x9753190'

2 个答案:

答案 0 :(得分:1)

  

NSString * path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@“ma /V_%@/gma2/fixture_layers/ifocus.xml”,version]];

答案 1 :(得分:0)

由于您已经在字符串中包含多个/,因此使用stringByAppendingPathComponent没有任何优势。所以你也可以使用:

NSString* path = [documentsDirectory stringByAppendingFormat:@"ma/V_%@/gma2/fixture_layers/ifocus.xml", version];

另一个让你受益于stringByAppendingPathComponent的选择就是将它分解为:

NSString* path = [[[[[documentsDirectory stringByAppendingPathComponent:@"ma"] stringByAppendingPathComponent:[NSString stringWithFormat:@"V_%@", version]] stringByAppendingPathComponent:@"gma2"] stringByAppendingPathComponent:@"fixture_layers"] stringByAppendingPathComponent:@"ifocus.xml"];

但那有点难看。