2015-11-08 4 views
0

Я пытаюсь передать переменную между контроллерам просмотреть, а затем показать новый видPass Variable между View Controller и Display

Я осуществил следующий код передать переменную (без использования SEGUE)

viewCameraViewController *viewCamera = [[viewCameraViewController alloc] initWithNibName:@"viewCameraViewController" bundle:nil]; 
    viewCamera.str1 = self.str; 
    [self.navigationController pushViewController:viewCamera animated:YES]; 

, а затем это, чтобы показать вид

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"cameraView"]; 

    vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentViewController:vc animated:YES completion:NULL]; 

однако, когда новый вид загружает переменная равна нулю

вот мой класс подвижки фотоаппарата

// 
// viewCameraViewController.m 
// WebView 
// 
// Created by Admin on 31/10/2015. 
// Copyright (c) 2015 Admin. All rights reserved. 
// 

#import "viewCameraViewController.h" 



@interface viewCameraViewController() 

@end 

@implementation viewCameraViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view.\ 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(IBAction)takePhoto:(UIButton *)sender { 

    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Error" 
                   message:@"Device has no camera" 
                  delegate:nil 
                cancelButtonTitle:@"OK" 
                otherButtonTitles:nil]; 
     [myAlertView show]; 

    } else { 

    UIImagePickerController *picker = [[UIImagePickerController alloc]init]; 
    picker.delegate = self; 
    picker.allowsEditing = YES; 
    picker.sourceType = UIImagePickerControllerSourceTypeCamera; 

    [self presentViewController: picker animated:YES completion:NULL]; 
    } 
} 

-(IBAction)selectPhoto:(id)sender { 
    UIImagePickerController *picker = [[UIImagePickerController alloc]init]; 
    picker.delegate = self; 
    picker.allowsEditing = YES; 
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

    [self presentViewController: picker animated:YES completion:NULL]; 

} 

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 
    self.imageView.image = chosenImage; 

    [picker dismissViewControllerAnimated:YES completion:NULL]; 


} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 

    [picker dismissViewControllerAnimated:YES completion:NULL]; 

} 



@end 

им при условии, что это вызвано инициализацией два экземпляра класса, один называется и подвижка фотоаппарат других называется VC.

может кто-нибудь помочь определить, где я иду не так, и указать мне в правильном направлении.

Заранее спасибо

+0

вы ожидаете, что vc и viewCamera будут одним и тем же объектом? –

+0

Нет, я не ожидаю, что они будут такими же, но я не могу сделать viewCamera Display, но могу передать переменную, а наоборот - для vc – PowerMan2015

+0

что такое класс CameraView? –

ответ

1

Если у Вас есть View Controller, который определен в Interface Builder, вы не хотите, чтобы создать его экземпляр с Alloc/инициализации, а с помощью метода, используемого в вашем втором фрагменте. Убедитесь, что вы установили класс контроллера вида в конструктор интерфейса, а затем примените его к вашему классу, чтобы установить переменную.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
YourViewControllerClass *vc = (YourViewControllerClass *)[storyboard instantiateViewControllerWithIdentifier:@"cameraView"]; 

vc.yourStringVariable = self.str; 
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentViewController:vc animated:YES completion:NULL]; 

Обратите внимание, что presentViewController и pushViewController два различных способа отображения контроллер представления. Первый представляет его модально, другой - толкает его на контроллер навигации. Вы не хотите оба этих звонка.


Update после обновления: так, YourViewControllerClass является viewCameraViewController - однако, я бы отметить, что это странное имя класс; имена классов должны начинаться с верхнего регистра. Назовите его CameraViewController вместо этого, это мое предложение. И не используйте initWithNib:, если у вас есть контроллер просмотра, определенный в раскадровке, просто удалите это.

+0

благодарит за помощь – PowerMan2015