在iOS 7.1中进入后台模式时应用程序崩溃

时间:2014-03-14 08:18:35

标签: ios background crash

今天,我将Xcode升级到最新版本(版本5.1(5B130a))以支持iOS 7.1。这样做之后,我通常会在Xcode中运行我的项目。然后应用程序在进入后台mdoe时崩溃。在升级iOS SDK之前,我没有更改任何代码。代码在iOS 5.x,6.x,7.0.x中完美运行。

当应用进入后台模式时,它不会执行以下任何操作:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // do nothing
}

- (void)applicationWillResignActive:(UIApplication *)application
{
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

在跟踪崩溃日志后,我发现崩溃点位于以下屏幕截图中突出显示的行: enter image description here

任何想法?

BTW,该项目正在使用非ARC机制。视图控制器由故事板初始化。

3 个答案:

答案 0 :(得分:1)

看起来您正在访问已发布的内容(根据您的崩溃进行猜测)。

启用僵尸,这将告诉您是否以及违规对象是什么。

产品>方案>编辑方案

然后点击'Run YOURPROJECT>诊断>启用僵尸对象

然后重新运行并关闭它,看看调试器中的崩溃是否发生了变化......

答案 1 :(得分:0)

  • 转到"断点导航器"
  • 左键单击"添加新的断点"在项目导航器的底部(左下角)
  • 点击"添加例外断点"

现在运行项目,您将获得崩溃的确切位置。

答案 2 :(得分:0)

最后,我知道发生了什么。

我得到一个像这样的表视图控制器:

@interface UserMenuViewController : UITableViewController<UITableViewDataSource, UITableViewDelegate> {
    ....
}

在下面的方法中,我使用[UIButton buttonWithType:]方法在表视图单元格中创建一个UIButton组件。将按钮插入单元格后,我将其释放。但我不应该这样做,因为这是一个错误。因此,当应用程序进入后台模式时,UIButton对象似乎变得混乱。在我标记了发布代码后,它现在正常工作。 ^^

但是我仍然不知道为什么在iOS 5.x,6.x和7.0.x中运行时它没问题。在这些环境中它也应该崩溃。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
....
if( row == 5 ) {
    BOOL bDidLogin = NO;
    NSString *fileName = bDidLogin? @"btn_logout.png":@"btn_login.png";
    SEL callback = bDidLogin? @selector(doLogout:):@selector(doLogin:);
    UIImage *img = [UIImage imageNamed:fileName];
    UIButton *btn = [Utils generateImgButton:img withHandler:self withCallback:callback withBgColor:[UIColor clearColor]];
    float x = cellWidth - btn.frame.size.width - padding*2;
    float y = cellHeight - btn.frame.size.height - padding*2;
    [Utils moveView:btn toX:x toY:y];
    [cell.contentView addSubview:btn];
    [btn release]; // should not do this!!!!!!!!!!!!!
}
....
}
在Utils.m中

+ (UIButton *) generateImgButton:(UIImage *)img withHandler:(id)handler withCallback:(SEL)callback
                 withBgColor:(UIColor *)bgColor {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundColor:bgColor];
[button setImage:img forState:UIControlStateNormal];
button.frame = CGRectMake(0.0, 0.0, img.size.width, img.size.height);
[button addTarget:handler action:callback forControlEvents:UIControlEventTouchUpInside];
return button;
 }