(iOS) Черный экран при пользовательской инициализации UIViewController

Это мой первый вопрос здесь. Я пытаюсь сделать приложение, которое будет работать с Core Audio. Я нашел этот фреймворк http://theamazingaudioengine.com/ который я пытаюсь использовать, и до сих пор мне удалось сделать первое в документации, а именно воспроизвести файл. Однако при пользовательской инициализации UIViewController в делегате приложения я теряю все его содержимое, и контроллер представления становится черным без других элементов.

В моем UIViewController есть только одна кнопка, которую я хотел использовать для запуска воспроизведения файла, но, поскольку у меня нет доступа к нему, в данный момент файл начинает воспроизводиться при сборке проекта.

Есть идеи, что я делаю не так?

Это мое приложение Delegate:

@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

2 ответа

Решение

Поскольку вы используете раскадровку, вы должны удалить весь этот код из делегата приложения. Раскадровка автоматически создает экземпляр вашего первоначального контроллера и выводит его на экран. Распределяя init'ing один, вы просто создаете другой, который не имеет никакого собственного представления.

Чтобы добавить свой аудиоконтроллер, вы должны добавить код в метод viewDidLoad SoundCheckViewController, который делает это, а не в метод init. Это был бы обычный способ сделать это, но я не уверен, что возможно с фреймворком, который вы используете.

Я думаю, что вы должны сначала инициализировать свой контроллер представления.

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

    return self;
}
Другие вопросы по тегам