xcode 4.6 (4H127), xcode 4.6.3 (4H1503): Простая конвертация в нижнем/верхнем регистре строки с ударным символом вызывает зависание в зависимости от настройки цели развертывания. Фрагмент кода:Преобразование NSString в нижние регистры
NSString *lc1 = @"Bosnië-Herzegovina";
NSString *lc2 = [lc1 lowercaseString];
NSString *uc3 = [lc1 uppercaseString];
NSLog(@"\nlc1=%@\nlc2=%@\nuc3=%@ ", lc1,lc2,uc3);
«Е» просто набирается как «неавтоматического и £», файл исходного кода регулярно 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
Edit: Я пытался минимизировать проект, чтобы показать эту проблему, и ... он исчез. У меня есть немного C-кода старого стиля, который использует такие вещи, как malloc, free, freed, memmove и т. Д. Если этот бит просто присутствует, даже не вызван, описанные проблемы происходят. Теперь я предполагаю, что некоторые подпрограммы загружаются из библиотеки, из которой она не должна загружаться. Копаем дальше.
Неужели это все еще сбой, если вы выберете «? – Skyler
Я не могу воспроизвести проблему с вашим кодом. Если целевой настройкой развертывания установлено значение 5.0 и запущено в iOS 5 Simulator, я получаю ожидаемый результат и без сбоев. - Возможно, проблема заключается в том, где вы читаете SQLite и конвертируете в NSString. Можете ли вы показать этот код? –
Спасибо! Какую версию xcode вы используете? – RickJansen