dataUsingEncoding может привести к сбою? - PullRequest
1 голос
/ 05 мая 2019

, когда он входит в метод NSString dataUsingEncoding, сбой происходит очень редко.

исходный код:

NSData *latin1Data = [appName dataUsingEncoding:NSUTF8StringEncoding];

стек вызовов:

MACH_Exception Crashed with mach exception EXC_BAD_ACCESS

Thread 0 name: (null)
0    libobjc.A    objc_object::release() (in libobjc.A.dylib)
1    CoreFoundation    _common_removeAllObjects (in CoreFoundation) 188
2    CoreFoundation    -[__NSArrayM dealloc] (in CoreFoundation) 28

3    libobjc.A    (anonymous namespace)::AutoreleasePoolPage::pop(void*) (in libobjc.A.dylib) 704
4    libdispatch    __dispatch_root_queue_drain (in libdispatch.dylib) 1148
5    libdispatch    __dispatch_worker_thread3 (in libdispatch.dylib) 124
6    libsystem_pthread    __pthread_wqthread (in libsystem_pthread.dylib) 1288
7    libobjc.A    _objc_msgSend (in libobjc.A.dylib) 40
8    Foundation    -[NSConcreteMutableData initWithLength:] (in Foundation) 316
9    Foundation    -[NSString(NSStringOtherEncodings) dataUsingEncoding:allowLossyConversion:] (in Foundation)
10  xxxApp    -[ xxxClass xxxMethod]  xxxFile.mm line:300

строка 300 файла xxxFile.mm:

NSData *latin1Data = [appName dataUsingEncoding:NSUTF8StringEncoding];

Редактировать, скопировано из комментария:

295 -(NSString *)userAgentString {
296     NSBundle *bundle = [NSBundle bundleForClass:[self class]];
297     // Attempt to find a name for this application
298     NSString *appName = [bundle objectForInfoDictionaryKey:@"CFBundleName"];
299
300     NSData *latin1Data = [appName dataUsingEncoding:NSUTF8StringEncoding];

сбой в строке 300 при вызове функции userAgentString.

1 Ответ

0 голосов
/ 06 мая 2019

Вы должны получить эту информацию из почтового пакета вашего приложения.

NSString *buildNumber = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]

ps: я удивлен частным классом работ.Кажется, вы иногда получаете нулевую ссылку.
(Угадайте: у вашего класса также есть инициализация. Если этот класс не завершился вовремя, среда выполнения не знает, к какому пакету принадлежит класс?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...