2017-06-01 8 views
0

私はiOSを初めて使用しています。コントローラ間でデータを受け渡しできません。私は、これは私が最初のビューコントローラ(送信)のビューコントローラiOSの目的cがビューコントローラ間でデータを渡す

.hファイルを受信する.hファイルにデリゲートを作成した合格のための私の方法であり、第2のビューコントローラに

を変数にアクセスすることはできませんよ @interface OtpViewController:UIViewController @property(nonatomic、strong)NSString * str; @property(強く、非原子性)NSString * tmp; @property(weak、nonatomic)NSString * requestReply;

最初のビューコントローラ(送信側)は、第2のビューコントローラ(受信)

-(void)setotp:(NSDictionary *)dic withMobile:(NSString *)str{ 
self.stri=[tmpdict valueforkey:@"otp"]; 
self.stri1=_mobiletf.text; 
OtpViewController.[tmpdict valueforkey:@"otp"]=self.stri; 
NSLog(@"%@----%@",self.stri,self.stri1); 
} 

第2のビューコントローラ(受信)

の.hファイルの

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(nullable id)sender{ 
    VerifyViewController *loadCtr = (VerifyViewController *)segue.destinationViewController; 
loadCtr.delegate = self; 
loadCtr.tmpStr = self.tmp; 
NSLog(@"--%@",self.tmp); 
[loadCtr setotp:self.tmpdict withMobile:_mobiletf.text]; 
//NSLog(@"otp:%@",[tmpdict valueForKey:@"otp"]); 
NSLog(@"mobile:%@",_mobiletf.text); 
} 

.mファイルの.mファイル

@protocol VerifyViewControllerDelegate <NSObject> 
@end 

@interface VerifyViewController : UIViewController 
@property (nonatomic,strong) NSString *otpStr; 
@property(nonatomic,strong) NSString *mobileStr; 

@end 

実際に私はサーバからotpを取得しようとしており、私は012を抽出しました最初のビューコントローラのと今はotpと携帯電話番号をテキストフィールドから2番目のビューコントローラに渡して、otpの確認をお願いします。

@interface VerifyViewController : UIViewController 
@property (nonatomic,strong) NSString *otpStr; 
@property(nonatomic,strong) NSString *mobileStr; 

はその後、値を渡す:履歴書の外で印刷されているもののログで

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
     [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
      NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; // this is json string 
     // NSError *error; 
      NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; // you need to convert to dictionary object 
      NSLog(@"requestReply: %@", jsonDict); 
      self.tmp=[jsonDict valueForKey:@"otp"] ; 
      self.str=self.tmp; 
      NSLog(@"tmp storage inside block:%@",self.tmp); 
    }] resume]; 
    [ self performSegueWithIdentifier:@"b1" sender:self]; 
    NSLog(@" storage:%@",self.str); 
    NSLog(@"tmp storage:%@",self.tmp); 
} 

は、私は、これは私のログデータコードの下

2017-06-01 12:26:45.803 MenuBar[2652:124758] 9047038606 
2017-06-01 12:26:45.809 MenuBar[2652:124758] storage:(null) 
2017-06-01 12:26:45.810 MenuBar[2652:124758] tmp storage:(null) 
2017-06-01 12:26:48.422 MenuBar[2652:124804] requestReply: { 
otp = 325106; 
success = 1; 
} 
2017-06-01 12:26:48.422 MenuBar[2652:124804] tmp storage inside block:325106 
+0

リンクを参照してくださいhttps://www.infragistics.com/community/blogs/torrey-betts/archive/2014/05/29/passing-data-between-view-controllers-ios-obj-c。 aspxまたはhttps://stackoverflow.com/questions/5210535/passing-data-between-view-controllers – user3575114

+0

[View Controller間でデータを受け渡しする]可能な複製(https://stackoverflow.com/questions/5210535/passing-data) -between-view-controllers) – Lion

答えて

1

使用

あるヌルいます:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(nullable id)sender 
{ 
    VerifyViewController *loadCtr = (VerifyViewController *)segue.destinationViewController; 
    loadCtr.otpStr = [tmpdict valueForKey:@"otp"]; 
    loadCtr.mobileStr = _mobiletf.text; 
} 

VerifyViewControllerのViewDidLoadメソッドでこれら2つの値にアクセスできます。

self.otpStrと自己。 mobileStr

+0

tempdict:宣言されていない識別子を使用してください。 @property(強く、非原子的)NSDictionary * tmpdict; 私はこれを.mファイル – Akshay

+0

に与え、セッションURLの後のログに、値が表示されたらnullを返します。 – Akshay

+0

[tmpdict valueForKey:@ "otp"];これをOTP値を取得するパラメータに置き換えます。 –

関連する問題