2016-05-11 1 views
0

Я импортирую изображение из приложения Mail в свое приложение, получаю изображение и пытаюсь отправить его на главный контроллер представления через AppDelegate. Я могу использовать NSLog @, чтобы подтвердить, что изображение проходит, но когда я пытаюсь его использовать, оно отображается как null. Вот мой код:Передача данных из других приложений с помощью «Открыть в», когда основной вид загружается через Storyboard?

В AppDelegate.m

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 


    if (url !=nil && [url isFileURL]) { 
     MainViewController *view = [[MainViewController alloc] init]; 
     [view handleDocumentOpenURL:url]; 
     NSLog(@"Url 1: %@", url); // Url appears 
    } 

    return YES; 

} 

В моей MainViewController.m

- (void)handleDocumentOpenURL:(NSURL *)url { 

    NSData *imageData = [NSData dataWithContentsOfURL:url]; 
    self.importedImage = [UIImage imageWithData:imageData]; 
    NSLog(@"Image %@", self.importedImage); // Shows the object exists 

} 

Проблема заключается в том, что если я пытаюсь открыть UIImage (self.importedImage) от других методов он говорит, что он равен нулю (он работает в рамках вышеупомянутого метода).

Дополнительная информация: Я объявляю importedImage как UIImage в файле MainViewController.h.

Я предполагаю, что мой AppDelegate, возможно, не будет обращаться к фактическому MainViewController, кроме его копии. Я искал ответ и ничего не нашел, любая помощь приветствуется.

ответ

0

Пожалуйста, попробуйте ниже код может быть его помог

если importedImage является UIView затем

[self.importedImage setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageWithData:imageData]]]; 

если importedImage является UIImageView затем

self.importedImage.image = [UIImage imageWithData:imageData]; 
+0

Спасибо вам за ответ. Фактически importImage является UIImage. Извините, что не упоминал об этом на этом посту. – AndreVitorio

+0

вы пробовали после UIImage alloc и init. self.importedImage = [[UIImage alloc] init]; self.importedImage = [UIImage imageWithData: imageData]; –

+0

Я пробовал это раньше, но это не сработало. Мне удалось это исправить, вы можете проверить ответ ниже. Спасибо, что помогли @Tluck – AndreVitorio

0

Я понял! Мое подозрение, что AppDelegate не хватало правильного ViewController, было правильным. Вот что я сделал, в AppDelegate:

UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
MainViewController *result; 

//check to see if navbar "get" worked 
if (navigationController.viewControllers) 

    //look for the nav controller in tab bar views 
    for (UINavigationController *view in navigationController.viewControllers) { 

     //when found, do the same thing to find the MainController under the nav controller 
     if ([view isKindOfClass:[UINavigationController class]]) 
      for (UIViewController *view2 in view.viewControllers) 
       if ([view2 isKindOfClass:[MainViewController class]]) 
        result = (MainViewController *) view2; 
    } 


if (url !=nil && [url isFileURL]) { 
    [result handleDocumentOpenURL:url]; 
    NSLog(@"Url 1: %@", url); 
} 

Я нашел ответ на эту тему: https://stackoverflow.com/a/8791991/4187621

Проблема была не то же самое, но решение работает для меня. Надеюсь, это поможет другим.