2014-11-11 8 views
-2

Я пытаюсь показать контроллер представления изображений в подклассе NSObject, но когда я вызываю presentViewController в корневом приложении vc, приложение вылетает без сообщения об ошибке.iOS показать контроллер представления из NSObject не работает

Мой код здесь:

UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 

UIViewController *root = [[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController]; 

[root presentViewController:picker animated:YES completion:nil]; 

Если я запускаю это в контроллере представления он просто работает отлично.

EDIT:

Я не могу использовать делегат, потому что я строю плагин для Unity и я не могу получить контроллер представления другими способами, чем это.

Я заметил, что сбой при вызове этого кода в текущем контроллере представления из IBAction:

- (IBAction)showPicker:(id)sender { 
    PhotoManager *manager = [[PhotoManager alloc] init]; 
    [manager loadPhoto]; 
} 

В ответ на замечания Вот код класса:

PhotoManager.h:

@interface PhotoManager : NSObject <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 

- (void)loadPhoto; 

@end 

.m:

@implementation PhotoManager { 
    UIViewController *root; 
} 

- (void)loadPhoto { 
    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 

    root = [[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController]; 

    [root presentViewController:picker animated:YES completion:nil]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [root dismissViewControllerAnimated:YES completion:nil]; 
    NSLog(@"%@", info); 
} 

@end 
+0

Этот код не имеет значения, его подклассов мы должны видеть, и как вы называете этот код. Удачи – meda

+0

обеспечить также stacktrace, показывающий, какую ошибку вы получите при ее сбое – royherma

+0

Уолтер сказал, что он сбой без сообщений об ошибках – NCFUSN

ответ

0

Правильным способом было бы создание протокола/делегата и обращение к представлению viewController, сообщающее ему представить сборщик. Это позволяет вам делать гораздо больше и это отличная привычка учиться сразу же ИМО.

How do I set up a simple delegate to communicate between two view controllers?

Смежные вопросы