2

所以两周前我向应用商店提交了一个精灵套件应用程序,一切都很好。在我提交应用程序之前我遇到了问题,因为 AvAudioSession 会崩溃,但是我能够通过这个Sprite Kit 解决这个问题,并且播放声音会导致应用程序终止。这基本上将 AVAudioSession 设置为在进入后台时处于非活动状态,然后在进入前台时再次处于活动状态。我最近将我的手机更新为 iOS 7.1,这个修复似乎在新的 7.1 中不起作用,而且我的应用程序在进入后台时再次崩溃。我已经从我的应用程序中取出所有音频,它似乎工作正常,所以它和我之前遇到的问题一样,现在解决方案不起作用!我真的需要解决这个问题,因为我有一个更新准备提交..干杯山姆

4

2 回答 2

8

我做的!

我只是暂停了 SKView- (void)applicationWillResignActive:(UIApplication *)application并将 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];
 }
于 2014-03-15T01:29:31.590 回答
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;
}
于 2014-06-25T10:02:28.000 回答