2013-04-26 101 views
0

这是我的第一个问题。我正在尝试制作一个可与Core Audio合作的应用程序。我发现这个框架http://theamazingaudioengine.com/,我试图使用,到目前为止,我设法做文档中的第一件事,即播放文件。但是,通过在应用程序委托中自定义初始化UIViewController,我失去了它的所有内容,并且视图控制器变黑,没有其他元素。我的UIViewController只有一个按钮,我想用它来启动文件的播放,但由于我无法访问它,此刻,当项目构建时,文件开始播放。(iOS)自定义初始化时出现黑屏UIViewController

任何想法我做错了什么?

这是我的appDelegate:

@implementation SoundCheckAppDelegate 

@synthesize window = _window; 
@synthesize audioController = _audioController; 
@synthesize viewController = _viewController; 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 


    // Create an instance of the audio controller, set it up and start it running 
    self.audioController = [[[AEAudioController alloc] initWithAudioDescription:[AEAudioController nonInterleaved16BitStereoAudioDescription] inputEnabled:YES] autorelease]; 
    _audioController.preferredBufferDuration = 0.005; 
    [_audioController start:NULL]; 

    // Create and display view controller 
    self.viewController = [[SoundCheckViewController alloc] initWithAudioController:_audioController]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

@end 

而且我的UIViewController:

@interface SoundCheckViewController() 

@property (nonatomic, strong) AEAudioController *audioController; 
@property (nonatomic, strong) AEAudioFilePlayer *loop; 

@end 

@implementation SoundCheckViewController 

- (id)initWithAudioController:(AEAudioController*)audioController { 
    self.audioController = audioController; 

    NSError *error; 

    NSURL *file = [[NSBundle mainBundle] URLForResource:@"Southern Rock Drums" withExtension:@"m4a"]; 
    self.loop = [AEAudioFilePlayer audioFilePlayerWithURL:file 
              audioController:_audioController 
                error:&error]; 
    if(error) 
     NSLog(@"couldn't start loop"); 

    _loop.removeUponFinish = YES; 
    _loop.loop = YES; 
    _loop.completionBlock = ^{ 
     self.loop = nil; 
    }; 

    [_audioController addChannels:[NSArray arrayWithObject:_loop]]; 

    return self; 
} 



@end 
+0

你在哪里定制你的视图控制器的视图? XIB?故事情节? – rdelmar 2013-04-26 16:21:15

+0

它在我的故事板 - xcode给你开始一个项目时给你的那个 – kanstraktar 2013-04-26 16:48:06

+0

它在我的故事板中,我在其中添加按钮 – kanstraktar 2013-04-26 16:48:53

回答

2

由于您使用的是故事板,你应该把所有的代码出来的应用程序委托的。故事板自动实例化您的初始控制器并将其放置在屏幕上。通过alloc init'ing,你只是创建另一个没有任何自定义视图。

要添加音频控制器,您应该在SoundCheckViewController的viewDidLoad方法中添加代码,而不是在init方法中。这将是通常的做法,但我不确定你使用的框架有什么可能。

+0

所以我把所有的东西都拿出来了,但是proj ect甚至没有在SoundCheckViewController中访问我的viewDidLoad。从我的想法来看,ViewController应该用initWithAudioController初始化以启动音频引擎,但我不知道该把代码放在哪里。 – kanstraktar 2013-04-26 17:26:40

+0

它的工作原理!我从appDelegate中拿出了所有的代码,并通过调用[self initWithAudioController:self.audioController]来使它工作。在viewDidLoad中。谢谢! – kanstraktar 2013-04-27 15:27:18

0

我觉得你应该先初始化视图控制器。

- (id)initWithAudioController:(AEAudioController*)audioController { 
    // THIS LINE IS MISSING IN YOUR CODE 
    self = [super initWithNibName:@"SoundCheckViewController" bundle:nil]; 
    if (self) { 
     self.audioController = audioController; 
     ... 
    } 

    return self; 
} 
+0

谢谢,我补充说。我有另一个应用程序,我正在对它们进行测试。在一个我仍然有一个黑屏和一个工作的应用程序,但另一个与此消息崩溃:由于未捕获的异常'NSInternalInconsistencyException',原因:'无法加载捆绑NIB:'NSBundle(加载)'名称'test'' ----两部分消息--- – kanstraktar 2013-04-26 16:19:45

+0

- - 第二部分---- ***第一掷调用堆栈: (0x22a5012 0x14e1e7e 0x22a4deb 0x641ef9 0x5067e7 0x506dc8 0x506ff8 0x507232 0x4563d5 0x45676f 0x456905 0x45f917 0x2897 0x423157 0x423747 0x42494b 0x435cb5 0x436beb 0x428698 0x2de7df9 0x2de7ad0 0x221abf5 0x221a962 0x224bbb6 0x224af44 0x224ae1b 0x42417a 0x425ffc 0x2462 0x2395) 的libC++ abi.dylib:终止调用抛出异常 – kanstraktar 2013-04-26 16:22:42