2015-02-11 119 views
0

我仅在iPad上运行仅iPhone应用程序时遇到问题。崩溃日志中的错误是iPhone应用程序无法在iPad上运行

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]'导致的崩溃原因。这让我困惑。我不知道如何调试和修正这种错误

UPDATE:

在这行代码断点停止

- (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:]'会导致这个错误?

+0

如果您遇到此错误,那么您的应用程序将编译。您的图像是否在要复制的文件列表中? – Neva 2015-02-11 09:57:12

+0

是的,我没有问题在iPhone上安装它32位或64位。 – Suprie 2015-02-11 09:59:22

+0

你应该更新标题 – Neva 2015-02-11 10:00:23

回答

0

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

+0

使用异常断点和调试器,只显示__lldb_unnamed_function1296 $$ MyApp – Suprie 2015-02-11 10:15:27

+0

你在堆栈跟踪中看到了什么? – Vytautas 2015-02-11 10:18:00

+0

断点指向'[UIImage imageNamed:]'。我用断点指向我的代码片断更新了问题。 – Suprie 2015-02-11 10:25:53

1

问题是您发送消息到UIImage(调用静态函数)与无效的参数。当然。因此[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

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

但问题很有意思,我会在几天内为自己研究它。所以如果你需要更多的信息,我们可以联系。

+0

我已更新我的问题。包括imageNamed的片段 – Suprie 2015-02-11 10:24:50

+0

@Suprie好的,这个问题很奇怪。我会尽量弄清楚。 – 2015-02-11 14:20:58

+0

非常感谢你的时间先生。我也发现这个问题很奇怪,但我相信这是由错误的构建设置引起的。如果我改变为通用版本,它就像一个魅力。如果尝试将仅​​iPhone应用安装到iPad,则失败。 – Suprie 2015-02-12 03:54:31

相关问题