iOS崩溃SIGABRT有时会发生

时间:2015-01-12 08:24:29

标签: ios objective-c

我在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);
    });
});

1 个答案:

答案 0 :(得分:0)

我假设从您的评论“服务器端已调整大小......”binary已从服务器加载。

如果您的变量binary不是您的二进制图像数据,而是字符串(即从酒店网络登录页面或其他网络foobar收到的),会发生什么?

试着检查XTTeamLogo是否可以处理它

NSString* testString = @"dummy test string data. maybe it must be longer";
NSData* binary = [testString dataUsingEncoding:NSUTF8StringEncoding];

如果是这样,您应该在假定已收到图像数据之前检查网络响应的mime类型。