与[NSBundle mainBundle] pathForResource一起使用时出现奇怪的NSString行为

时间:2013-09-20 16:22:25

标签: iphone ios objective-c nsstring

今天我们有一个奇怪的人,我认为我的NSStrings编码不正确。

NSString * convertedString = [NSString stringWithUTF8String:mesh->groupMesh[i].materialData->textureName];

-textureName只是一个c样式字符串,我将其转换为NSString。

- 字符串是:“dennum1.png”

NSArray * line = [convertedString componentsSeparatedByString:@"."];

NSString * texPath = [[NSBundle mainBundle] pathForResource:line[0] ofType:line[1]];

然后我把它分成一个NSArray行,用句号“。”分隔。

这使得line [0]为dennum1,而line [1]为png。

我甚至做了一个NSLog来确保:

NSLog(@"Name:%@ Type:%@", line[0], line[1]);

2013-09-21 02:15:27.386 SteveZissou[8846:c07] Name:dennum1 Type:png

我将其解析为pathForResource函数,我得到一个(null)响应。

但如果我在代码I.E中输入文件名:

    convertedString = @"dennum1.png";

    NSArray * line = [convertedString componentsSeparatedByString:@"."];

    NSString * texPath = [[NSBundle mainBundle] pathForResource:line[0] ofType:line[1]];

    NSLog(@"This is the texPath: %@",texPath);

IT工作?!

This is the texPath: /Users/meow/Library/Application Support/iPhone Simulator/6.0/Applications/2DEB8076-5F9D-45DE-8A73-10B1C8A084B4/SteveZissou.app/dennum1.png

我在代码中输入的NSString和来自转换的NSString是否有可能以不同的方式编码?

当我单独NSLog时,无论类型如何,我都得到相同的结果:

2013-09-21 02:15:27.386 SteveZissou[8846:c07] This is the c style string: dennum1.png
2013-09-21 02:15:27.386 SteveZissou[8846:c07] This is the converted c style string: dennum1.png
2013-09-21 02:15:27.386 SteveZissou[8846:c07] This is the string manually typed in: dennum1.png

2 个答案:

答案 0 :(得分:0)

如果您使用旨在处理此内容的NSPathUtilities中的方法会发生什么。像:

NSString * texPath = [[NSBundle mainBundle] pathForResource:string.stringByDeletingPathExtension ofType:string.pathExtension];

此外,还有-fileSystemRepresentation将NSString转换为const char *并在无法正确转换字符串时抛出异常。

答案 1 :(得分:0)

我在浏览可能的代码组合并偶然发现它之后想出来了。

我使用NSURL函数根据我正在使用的字符串获取路径,这导致了这条路径:

file://localhost/Users/meow/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/2DEB8076-5F9D-45DE-8A73-10B1C8A084B4/SteveZissou.app/dennum2.png%0D

看看最后!那不应该在那里!原来它被称为回车并且它被拉出文件(可能是文件格式的残余),但是对于NSLog是不可见的,但它对NSURL是不可见的(NSURL必须读取字节并显示它们是什么?) 。因此,从路径末端剪断回车给我正确的文件,一切正常。

我一直在想自己使用十六进制编辑器来查看文件,但是在mac appstore上找不到一个,我想如果这是Windows,我会在一半的时间内抓住它。