2016-10-27 7 views
-2

デリゲートを使用してビューコントローラから第2ビューコントローラにデータを転送します。何が間違っているのか、なぜ私のプロトコルが第2ビューコントローラで確認していないのか。コード:Iamは間違っ私は何か...をしないのですということである重複していませんデリゲートを使用してビューコントローラから別のビューコントローラにデータを転送したい場合、ここでデリゲートメソッドを使用したい

"This Is my view Controller code" 

ViewController.h 
#import <UIKit/UIKit.h> 
#import "SecondViewController.h" 

@protocol ViewControllerProtocol <NSObject> 
-(void)passData:(NSString*)data; 
@end 

@interface ViewController : UIViewController 

@property id<ViewControllerProtocol>delegateVC; 
@property (weak, nonatomic) IBOutlet UITextField *txtFieldVC; 
- (IBAction)btnSendVC:(id)sender; 
@end 


ViewController.m 
#import "ViewController.h" 

@interface ViewController() 
@end 

@implementation ViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 
- (IBAction)btnSendVC:(id)sender { 
    [self.delegateVC passData:self.txtFieldVC.text]; 
    [self performSegueWithIdentifier:@"next" sender:self]; 
} 
@end// 

"This is my second view Controller code" 
SecondViewController.h 
#import <UIKit/UIKit.h> 
#import "ViewController.h" 
@interface SecondViewController : UIViewController<ViewControllerProtocol> 

- (IBAction)btnSVC:(id)sender; 
@property (weak, nonatomic) IBOutlet UITextField *txtFieldSVC; 
@end 

// SecondViewController.m 

#import "SecondViewController.h" 
@interface SecondViewController() 
@end 

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

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
-(void)passData:(NSString *)data { 
    self.txtFieldSVC.text = [NSString stringWithFormat:@"%@",data]; 
    NSLog(@"Data Received: %@",data); 
} 
- (IBAction)btnSVC:(id)sender { 
    [self.navigationController popViewControllerAnimated:YES]; 
} 
@end 

+4

スクリーンショットをアップロードするのではなく、問題のコードを記述する必要があります。 – Lion

+0

2番目のviewcontrollerの画像がなく、直接コードを投稿する – Vinodh

+0

デリゲートは必要ありません。 'prepareForSegue'を使用することはできますが、それに関係なく、2番目のビューコントローラがインスタンス化される前にデリゲートにアクセスしようとしているので、それを行う方法は機能しません – Paulw11

答えて

1

我々は上記のコードを使用する場合、カスタムデリゲートを使用して、第2のビューコントローラに最初のビューコントローラからデータを送信することはできませんしかし、Second View ControllerからFirst View Controllerにデータを送信したい場合は、可能です。Next View ControllerからPrevious View Controllerにデータを送信する場合は、カスタムDelegateとNotificationメソッドを使用してデータを送信できます。

これで、First View ControllerからSecond ViewまたはNext View Controllerにデータを送信する必要があります。そのためには、storyboardのprepareForSegueメソッドとperformSegueWithIdentifierメソッドを使用できます。これで十分です。

+0

デリゲートはどこに割り当てられますか? – Paulw11

+0

- (void)viewController:(ViewController *)viewController passData:(NSString *)text; この予想される種類のエラーを表示します – raj

+0

動作しませんか? – user3182143

関連する問題