iPhone应用程序不会在iPad上运行

时间:2015-02-11 09:54:43

标签: ios objective-c iphone ipad

我在iPhone上运行只有iPhone的应用程序时遇到了问题。崩溃日志中的错误是

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_PROTECTION_FAILURE at 0x00ac3ff8
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_malloc.dylib          0x38cccdd4 allocate_pages + 352
1   libsystem_malloc.dylib          0x38cccace large_malloc + 70
2   libsystem_malloc.dylib          0x38cc83ee szone_malloc_should_clear + 1362
3   libsystem_malloc.dylib          0x38cc7e68 malloc_zone_malloc + 88
4   CoreFoundation                  0x2aa24ea2 __CFStringChangeSizeMultiple + 866
5   CoreFoundation                  0x2a983554 CFStringCreateMutableCopy + 408
6   CoreFoundation                  0x2a99abba -[__NSCFString mutableCopyWithZone:] + 22
7   MyApp                       0x006a274c 0xa3000 + 6289228
8   MyApp                       0x006a2a7e 0xa3000 + 6290046
9   MyApp                       0x006a2800 0xa3000 + 6289408
10  MyApp                       0x006a2a7e 0xa3000 + 6290046
11  MyApp                       0x006a2800 0xa3000 + 6289408
12  MyApp                       0x006a2a7e 0xa3000 + 6290046
13  MyApp                       0x006a2800 0xa3000 + 6289408
14  MyApp                       0x006a2a7e 0xa3000 + 6290046
15  MyApp                       0x006a2800 0xa3000 + 6289408
16  MyApp                       0x006a2a7e 0xa3000 + 6290046
17  MyApp                       0x006a2800 0xa3000 + 6289408
18  MyApp                       0x006a2a7e 0xa3000 + 6290046
19  MyApp                       0x006a2800 0xa3000 + 6289408
20  MyApp                       0x006a2a7e 0xa3000 + 6290046
21  MyApp                       0x006a2800 0xa3000 + 6289408
22  MyApp                       0x006a2a7e 0xa3000 + 6290046
23  MyApp                       0x006a2800 0xa3000 + 6289408
24  MyApp                       0x006a2a7e 0xa3000 + 6290046

在XCode中,崩溃的原因是'[UIImage imageNamed]'。这困惑了我。我想知道如何调试和修复这种错误

更新:

断点停在此代码行

- (UIButton *)customBackButton
{
UIImage *buttonImage = [UIImage imageNamed:@"actionbar_back_nor.png"];
    UIImage *buttonImagePressed = [UIImage imageNamed:@"actionbar_back_pre.png"];
    UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [aButton setImage:buttonImage forState:UIControlStateNormal];
    [aButton setImage:buttonImagePressed forState:UIControlStateHighlighted];
    aButton.frame = CGRectMake(0.0,0.0,44,44);
    UIEdgeInsets insets;
    if (IOS_VERSION_7_OR_BETTER) {
        insets = UIEdgeInsetsMake(11, 0, 11, 22);
    }else{
        insets = UIEdgeInsetsMake(11, 11, 11, 11);
    }

    aButton.imageEdgeInsets = insets;

    [aButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
}

我将'[UIImage imageNamed:]'更改为'[UIImage imageWithContentsOfFile:]'并且运行正常。为什么'[UIImage imageNamed:]'会导致此错误?

2 个答案:

答案 0 :(得分:1)

问题是您使用无效参数将消息发送到UIImage(调用静态函数)。当然可以。

这就是为什么你在-[__NSCFString mutableCopyWithZone:]上收到错误的原因,因为[UIImage imageNamed:]需要NSString参数,但却出错了。

请发布您的代码。

<强>更新

既然你说你只为iPhone编译你的应用程序并在iPad上运行它,我认为问题出在iPad上的图像查找中。不幸的是,我无法深入,但根据这份文件https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/ImageSoundResources/ImageSoundResources.html,我们知道iPad首先会查找特定于iPad的资源。所以我不确定,但似乎[UIImage imageNamed:]在这一点上混淆了。您可以尝试将actionbar_back_nor.pngactionbar_back_pre.png复制到actionbar_back_nor~ipad.pngactionbar_back_pre~ipad.png

我不确定,但这似乎是可以隐藏理由的唯一一点。

但问题非常有趣,我会在几天内为自己研究。因此,如果您需要更多信息,我们可以联系。

答案 1 :(得分:0)

只需添加异常断点,它就会显示代码崩溃的确切位置,然后使用强大的调试器。