iOS 7.1 Sprite Kit AVAudioSession输入背景时崩溃

时间:2014-03-14 13:58:29

标签: ios iphone objective-c sprite-kit ios7.1

所以2周前我向应用程序商店提交了一个sprite kit应用程序,一切都很好。在我提交应用程序之前我遇到了问题,因为AvAudioSession会崩溃,但是我能通过这个Sprite Kit & playing sound leads to app termination解决这个问题。这基本上在进入后台时将AVAudioSession设置为非活动状态,然后在进入前台时再次激活。我最近更新了我的手机iOS 7.1,这个修复似乎不适用于新7.1,我的应用程序在进入后台时再次崩溃。我已经从我的应用程序中取出所有音频,它似乎工作正常,所以它是我刚才解决方案不起作用的问题!我真的需要解决这个问题,因为我有一个更新准备提交.. 干杯萨姆

2 个答案:

答案 0 :(得分:8)

我做到了!

我暂停了- (void)applicationWillResignActive:(UIApplication *)application中的SKView,并将AVAudioSession设置为无效。

AppDelegate.h

   #import <SpriteKit/SpriteKit.h>

AppDelegate.m

 - (void)applicationWillResignActive:(UIApplication *)application
      {
// prevent audio crash
[[AVAudioSession sharedInstance] setActive:NO error:nil];

SKView *view = (SKView *)self.window.rootViewController.view;
view.paused = YES;
 }


  - (void)applicationDidEnterBackground:(UIApplication *)application
   {

[[AVAudioSession sharedInstance] setActive:NO error:nil];
}


  - (void)applicationDidBecomeActive:(UIApplication *)application
   {
SKView *view = (SKView *)self.window.rootViewController.view;
view.paused = NO;
[[AVAudioSession sharedInstance] setActive:YES error:nil];
 }

答案 1 :(得分:0)

添加到@ObjectivesCsam回答:

当rootViewControllers视图不是SKView时你可以使用

- (SKView *)getGameView {
    NSArray *viewControllers = self.window.rootViewController.childViewControllers;
    for (UIViewController *vc in viewControllers) {
        if ([vc.view isKindOfClass:[SKView class]]) {
            SKView *view = (SKView *)vc.view;
            return view;
        }
    }
    return nil;
}