2011-04-28 71 views
0

我真的在撞上一个奇怪的问题。我的应用程序的一些用户报告说,该应用程序无法启动,但在显示启动屏幕2秒后崩溃。这只发生在较旧的iPod 2G/iPhone 3G上。发生这种情况后,我试图追踪它。iPhone 3G/iPod 2G上的奇怪崩溃

调试代码不会发生崩溃,但仅在发布版本中发生。直到发生崩溃时,我的代码才被执行。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    NSString *ipadXib = [NSString stringWithFormat:@"%@-iPad", [[self class] description]]; 
    return [super initWithNibName:ipadXib bundle:nibBundleOrNil]; 
    } else { 
    return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    } 
} 
:有些UIViewControllers在我的AppDelegate初始化,无论序列我选择这里,他们第一次通过initWithNibName,这是所有控制器相同,处理正确的厦门国际银行的加载一个通用的应用程序运行失败之后

该代码运行良好,但从这里返回时,最终在UIKit(不是我的代码)中出现了SIGBUS错误。我怀疑上面的代码,因为当我只是不重写initWithNibName(这对iPhone版本来说没问题)时,完整的代码将贯穿始终。如果我在这里调用[super ...],它也可以工作,但是我怀疑编译器只是简单地将它优化掉,具有相同的效果,而不会覆盖它。由于InterfaceIdiom不是iPad,所以只使用相同的超级函数而不用改变参数,所以它应该是不容易的。 它适用于其他所有设备。没有分析仪错误,无泄漏。它真的发生得这么早,以至于几乎没有任何我的代码,除了上述情况在崩溃发生时被调用。它发生在我控制器序列中的第一个控制器上。

任何想法?我完全卡在...

回答

0

一些调查研究后(在整个:-(夜)的情况下,我发现这是一个简单的编译器的问题与的XCode 4.0 LLVM。发行说明的XCode 4.0 .2显示,具体来说这个编译器bug(妨碍arm6架构上的堆栈帧)现在已经修复了。安装4.0.2并重新编译后,现在一切正常。 奇怪的是,我收到苹果的邮件,我应该买iPad 2作为复活节的礼物,或者现在有白色的iPhone可用,但没有任何消息告诉开发人员2星期前这样一个重要的解决方案正在发送给开发人员:-(