2014-01-17 5 views
0

Я довольно новичок в iOS, и подумал, что я понимаю передачу данных в контроллер вида. Очевидно нет. Я пытаюсь передать данные изображения из родительского ViewController в дочерний ViewController, который представлен модально. Я думаю, что проблема связана с тем, как объекты передаются в модно представленный контроллер представлений, а не один, надвигаемый в стек навигации. Bellow - это код родителя и ребенка, связанный с проблемами, которые у меня возникают.Передача данных в контроллер просмотра различна, когда контроллер представлен модально?

От Parent.m:

- (IBAction)sort:(id)sender { 
    SortSelectViewController *ssvc = [self.storyboard instantiateViewControllerWithIdentifier:@"sort"]; 
    ssvc.backgroundImage = [self screenshot]; 
    [self performSegueWithIdentifier:@"sort" sender:self]; 
    //The segue is linked from my parent view controller to my child with the identifier "sort" 

} 

- (UIImage *) screenshot { 
    CGRect rect = CGRectMake(0, 20, 640, 1116); 
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale); 

    [self.view drawViewHierarchyInRect:rect afterScreenUpdates:YES]; 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 
    return image; 
} 

Это в моем Child.h

@property (nonatomic, strong) UIImage *backgroundImage; 

Это мой Child.m:

-(void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 
    NSLog(@"%@", self.backgroundImage); 
    //This log will return nil when the program is run - clear sign data is not being correctly passed 
    self.backgroundImage = [self.backgroundImage applyDarkEffect]; 
    self.imageView.image = self.backgroundImage; 
} 

я импортировал своего ребенка в мой родительский класс

+0

Возможный дубликат [Как передать информацию между раскадрой segues?] (Http://stackoverflow.com/questions/8597025/how-do-i-pass-information-between-storyboard-segues) –

+0

Попробуйте переносить изображение в делегате приложения и назначить изображение в контроллере детского представления в режиме viewwillapper –

ответ

0

попытка Как это Используя Story Борд должны использовать комбинацию двух методов performSegueWithIdentifier: * prepareForSegue: *

- (IBAction)sort:(id)sender { 

     [self performSegueWithIdentifier:@"sort" sender:self]; 
     //The segue is linked from my parent view controller to my child with the identifier "sort" 

    } 



    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 

     if ([[segue identifier] isEqualToString:@"sort"]) 
     { 
      SortSelectViewController *ssvc = [segue destinationViewController]; 
     ssvc.backgroundImage = [self screenshot]; 
     } 
    } 

- (UIImage *) screenshot { 
     //return normal image 
    return [UIImage imagenamed:"imagename.png"]; 
} 
+0

EDIT: извините, я не изменил метод инициализации контроллера представления к нему. Это работает, но почему я не могу сделать все это от нажатия кнопки? –

1

Ваш код (оригинальный вопрос) является прямой приравнивая экземпляра зрения контроллера и раскадровки перетекает. Когда вы используете segue раскадровки, VC создается автоматически для вы. Вы получаете доступ к нему как к «контроллеру вида назначения» в режиме «метод подготовкиForSegue:».

Что происходит, так это то, что вы создаете экземпляр контроллера представления, устанавливаете изображение, затем ... его отбрасывают и игнорируют (весь vc).

Далее вы инициируете segue, который обрабатывает iOS, создавая экземпляр другой, другой контроллер точки зрения. Это контроллер представления, который представляет iOS.

Итак: если вы собираетесь использовать серию раскадровки, iOS создает для вас VC. Не создавайте экземпляр самостоятельно, потому что нет никакого способа связать один , который вы используете в процессе обработки iOS segue. Тот, который вы создаете, является несущественным дополнением, которое игнорируется.

+0

Awesome. Отличное объяснение. То, что я искал! –

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