xcode的4.6(4H127)的xcode 4.6.3(4H1503):一个字符串的一个简单的低/大写转换与重音字符崩溃,这取决于部署目标的设置。 代码片段:
NSString *lc1 = @"Bosnië-Herzegovina";
NSString *lc2 = [lc1 lowercaseString];
NSString *uc3 = [lc1 uppercaseString];
NSLog( @"\nlc1=%@\nlc2=%@\nuc3=%@ ", lc1,lc2,uc3);
在“E”被简单地类型为“选择-U E”,源代码文件是经常UTF的Unicode。
LC1看起来有望在调试器。 但是,LC2和UC3串具有在端部附,与部署目标<6.1“中国”的字符。 6.1选择中国汉字都不见了。 所有这一切可能只是调试器的兼容性UTF,但部署目标5.0-5.1的代码片段甚至崩溃,如下图所示,这是我的问题; 我在实际应用中的字符串不是源代码,但是从SQLite数据库。 所以,在这个时刻,我只能建我的部署目标6.0+应用程序? 我缺少的东西吗?
0x1c49a20: incl %eax
0x1c49a21: jmp 0x1c499fb ; CFUniCharMapCaseTo + 1275
0x1c49a23: movl 12(%ebp), %eax
0x1c49a26: movw $105, (%eax)
0x1c49a2b: movw $775, 2(%eax)
0x1c49a31: movl $2, %eax
0x1c49a36: jmp 0x1c49dac ; CFUniCharMapCaseTo + 2220
0x1c49a3b: movl 12(%ebp), %eax
0x1c49a3e: movw $105, (%eax)
0x1c49a43: movw $775, 2(%eax)
0x1c49a49: movw $771, 4(%eax)
0x1c49a4f: movl $3, %eax
0x1c49a54: jmp 0x1c49dac ; CFUniCharMapCaseTo + 2220
0x1c49a59: movl %eax, %edi
0x1c49a5b: movl 1264482(%edi), %eax
0x1c49a61: movl (%eax), %eax
0x1c49a63: movl %eax, (%esp)
0x1c49a66: movl $0, 8(%esp)
0x1c49a6e: movl $48, 4(%esp)
0x1c49a76: calll 0x1bd9980 ; CFAllocatorAllocate
0x1c49a7b: leal 16(%eax), %ecx
0x1c49a7e: movl %ecx, 1379418(%edi)
0x1c49a84: leal 32(%eax), %ecx
0x1c49a87: movl %ecx, 1379422(%edi)
0x1c49a8d: movl 1379410(%edi), %ecx
0x1c49a93: movl (%ecx), %ecx <-- EXC_BAD_ACCESS (code=1,..
0x1c49a95: movl (%ecx), %ecx
编辑:我尝试尽量减少项目,以显示这个问题,... ...它消失了。 我有一点的使用之类的malloc,自由,解放,的memmove等,如果此位仅仅是存在,甚至不叫老式的C代码,描述的问题发生。 我的猜测是现在,一些程序从它不应该从加载库加载。 进一步挖掘。