2013-04-26 65 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