3

我一直在使用genstrings构建字符串文件来国际化我的 iPhone 应用程序。但是,我最近所做的一些更改导致该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 ,看看问题是否存在。找出哪一半文件有问题,然后再做一次……

这是 genstrings 中的一个错误,因此您无能为力。

于 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

对我来说,由于 NSLocalizedString 调用中的评论而崩溃。

例如:

NSLocalizedString(@"some text" /* a comment */,  
                  @"some other text.");

导致崩溃 genstrings,但这很好:

/* a comment */
NSLocalizedString(@"some text", @"some other text.");
于 2013-06-23T15:19:07.930 回答
0

拥有 Swift 4

"""
This is a comment
"""

语法似乎也让它崩溃。

于 2017-10-31T07:12:01.210 回答
0

这是genstrings找不到宏调用结束时产生的错误。

请注意,该genstrings实用程序无法处理跨多行的调用(无论内部是否有注释)。

所以这有效:

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

但这不是

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