(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;
}