У меня очень странная проблема. Я допустил ошибку при определении объекта NSString. Это явная ошибка. Но странно, что он отлично работает на некоторых устройствах iOS, в то время как он вызывает сбои на других.iOS - определение/инициализация NSString. 64bit vs 32bit
Я исправил ошибку, но я все еще в темноте, почему она когда-либо работала.
Если кто-нибудь может помочь мне понять это, мы будем очень благодарны.
Спасибо!
Bad Код:
NSString *language2 = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *language = [language substringToIndex:2];
NSLog(@"language = %@", language);
Как вы можете видеть, "NSString * язык = [язык substringToIndex: 2];" определяется как подстрока сама по себе.
Что сходит с ума, так это то, что это работает на некоторых устройствах. Я предполагаю, что это 64/32 бит вещь, которую я просто не понимаю.
Он падает на более старый iPad. Хотя на новом iPhone6 он работает, и NSLog указывает «язык = en».
Любые идеи?
Спасибо! После некоторого взгляда кажется, что мне «повезло», когда 64-разрядные устройства не сбой, поскольку адрес памяти заполнен предыдущим значением ... хотя значение неверно, оно все еще предотвращает ошибку ссылки на объект, которая вызывает сбой на 32-битных устройствах. Спасибо за понимание. – mtb
@mtb Обратите внимание, что поведение также может измениться, если вы включите оптимизатор или уровни оптимизации переключателей! На самом деле я немного удивлен, что компилятор в этом случае не предупреждал. – bbum