3

genstringsiPhoneアプリを国際化するために文字列ファイルを作成するために使用しています。ただし、最近行ったいくつかの変更により、genstringsツールは次のようなエラーをスローし始めました。

s1075-88:Directory jason$ genstrings -o en.lproj *.m
2011-02-26 16:42:26.941 genstrings[17962:903] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFString characterAtIndex:]: Range or index out of bounds'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00007fff82a267b4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x00007fff85c640f3 objc_exception_throw + 45
    2   CoreFoundation                      0x00007fff82a265d7 +[NSException raise:format:arguments:] + 103
    3   CoreFoundation                      0x00007fff82a26564 +[NSException raise:format:] + 148
    4   Foundation                          0x00007fff841a65e1 -[NSCFString characterAtIndex:] + 97
    5   genstrings                          0x0000000100001b9d 0x0 + 4294974365
    6   genstrings                          0x0000000100003080 0x0 + 4294979712
    7   genstrings                          0x0000000100003ee6 0x0 + 4294983398
    8   genstrings                          0x0000000100000d20 0x0 + 4294970656
)

これを引き起こしている可能性があるのは何ですか?手動ですべてを変更せずに、原因となっているプロジェクトの部分を見つけるにはどうすればよいですか?

4

7 に答える 7

3

ここには簡単なトリックはありません。

すべての .m ファイルを別のフォルダーにコピーしてから、バイナリ検索を実行します。

ファイルの半分で genstrings を実行し、問題があるかどうかを確認します。ファイルのどの半分に問題があるかを特定し、もう一度やり直してください...

これは genstring 内のバグなので、できることはあまりありません。

于 2011-02-27T01:17:20.467 に答える
2

genstringsを使用して、処理されるファイルの数を制限できますhead。これがすべてのファイルをローカライズするコマンドの場合:

find . -name \*.m | xargs genstrings -o en.lproj

を使用すると、次のようになりますhead

find . -name \*.m | head -5 | xargs genstrings -o ~/Documents/GenStringsTest

head の横の数字を増やして、クラッシュするまでコマンドを何度も実行してください。GenStrinsTest実行の合間に、一時フォルダー内のファイルを削除できます。クラッシュしたら、クラッシュする正確な場所まで数値を減らしてから実行します

find . -name \*.m | head -<minimum number of files for crash>

コンソールに書き込まれる最後のファイルは「間違った」ファイルになります。

于 2012-01-01T10:19:31.487 に答える
1

それが他の誰かを助ける場合に備えて、コメントにNSLocalizedStringがあると、このクラッシュが発生しました。私はそれがそれを見つけたと思います、そしてそれはパラメータとクラッシュを持っていませんでした

于 2012-02-07T23:22:52.223 に答える
0

この問題に遭遇しました。私の場合、genstrings は<filename>.m.origgit マージから残ったファイルをスキャンしていました。ファイルを削除する*.m.origと、不正な形式のローカライズされた文字列が含まれている必要があるため、修正されました。

于 2013-05-22T17:16:36.020 に答える
0

genstringsこれは、マクロ呼び出しの最後が見つからない場合に生成されるエラーです。

ユーティリティは複数行にわたる呼び出しを処理できないことに注意してくださいgenstrings(内部にコメントがあるかどうかに関係なく)。

したがって、これは機能します:

NSLocalizedString(@"Key", @"Comment")

しかし、これはそうではありません

NSLocalizedString(@"Key",
                  @"Comment")
于 2018-06-05T05:08:38.093 に答える