0

今日、皆さんに奇妙なことがあります。私の NSStrings が正しくエンコードされていないと思います。

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

-textureName は、NSString に変換する AC スタイルの文字列です。

- 文字列: "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) 応答が返されます。

しかし、ファイル名をコード IE にハードタイプすると、次のようになります。

    convertedString = @"dennum1.png";

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

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

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

できます?!

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
4

2 に答える 2

0

このようなことを処理するように設計された NSPathUtilities のメソッドを使用するとどうなりますか。お気に入り:

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

また、-fileSystemRepresentationNSString を に変換しconst char *、文字列を正しく変換できない場合に例外をスローするものもあります。

于 2013-09-20T16:30:18.730 に答える
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 はバイトを読み取って、それらが何であるかを表示する必要がありますか?) . したがって、パスの末尾から改行を切り取ると、正しいファイルが得られ、すべて問題ありません。

16 進エディターを使用してファイルを表示することを考え続けましたが、Mac アプリストアで無料のものを見つけることができませんでした。

于 2013-09-21T10:31:56.093 に答える