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