我在Appstore中有一个应用程序,有时会崩溃。我还没有能够重现这个错误。
我在Fabric中遇到的崩溃。
Thread : Crashed: com.apple.root.default-qos
0 libsystem_kernel.dylib 0x0000000197b1b270 __pthread_kill + 8
1 libsystem_pthread.dylib 0x0000000197bb9228 pthread_kill + 112
2 libsystem_c.dylib 0x0000000197a92b18 abort + 112
3 libsystem_malloc.dylib 0x0000000197b563e4 _nano_malloc_check_clear
4 libsystem_malloc.dylib 0x0000000197b56550 _nano_malloc_check_clear + 364
5 libsystem_malloc.dylib 0x0000000197b55064 nano_malloc + 44
6 libsystem_malloc.dylib 0x0000000197b453e4 malloc_zone_malloc + 116
7 CoreFoundation 0x0000000186cb179c __CFBasicHashRehash + 264
8 CoreFoundation 0x0000000186cb2f8c __CFBasicHashAddValue + 100
9 CoreFoundation 0x0000000186b60454 CFDictionarySetValue + 252
10 ImageIO 0x0000000187e3fab0 initImagePng + 2800
11 ImageIO 0x0000000187e3e804 makeImagePlus + 1056
12 ImageIO 0x0000000187e3df30 CGImageSourceCreateImageAtIndex + 184
13 UIKit 0x000000018b57cd94 _UIImageRefFromData + 296
14 UIKit 0x000000018b6e156c -[UIImage(UIImagePrivate) _initWithData:preserveScale:cache:] + 112
15 UIKit 0x000000018b57cc3c +[UIImage imageWithData:] + 60
16 APP 0x000000010007b4f4 __28+[XTTeamLogo logo:callback:]_block_invoke (XTTeamLogo.m:94)
17 libdispatch.dylib 0x00000001979d93ac _dispatch_call_block_and_release + 24
18 libdispatch.dylib 0x00000001979d936c _dispatch_client_callout + 16
19 libdispatch.dylib 0x00000001979e540c _dispatch_root_queue_drain + 1152
20 libdispatch.dylib 0x00000001979e675c _dispatch_worker_thread3 + 108
21 libsystem_pthread.dylib 0x0000000197bb52e4 _pthread_wqthread + 816
所以16号是我的代码之一,它给了我一个提示,检查XTTeamLogo中的第94行。其中包含此代码:
__block XTTeamLogo *logo;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^(void) {
...SERVER REQUEST...
if (!localizedError) {
NSData *binary = [[[result getMessageByPath:@"DocumentData"] getPropertyByPath:@"Data"] binary];
if (binary) {
->(94) logo = [[XTTeamLogo alloc] initWithImage:[UIImage imageWithData:binary] fromCache:NO];
[[XTDisk sharedInstance] write:logo fileName:kPersistents];
[[XTCache sharedInstance] setObject:logo forKey:kPersistents];
}
}
... ERROR HANDLING ETC...
dispatch_async(dispatch_get_main_queue(), ^(void){
callback(logo, localizedError);
});
});
答案 0 :(得分:0)
我假设从您的评论“服务器端已调整大小......”binary
已从服务器加载。
如果您的变量binary
不是您的二进制图像数据,而是字符串(即从酒店网络登录页面或其他网络foobar收到的),会发生什么?
试着检查XTTeamLogo是否可以处理它
NSString* testString = @"dummy test string data. maybe it must be longer";
NSData* binary = [testString dataUsingEncoding:NSUTF8StringEncoding];
如果是这样,您应该在假定已收到图像数据之前检查网络响应的mime类型。