簡體   English   中英

Segue沒有在ViewController之間傳遞數據

[英]Segue not passing data between ViewControllers

我正在制作使用付款方式的iOS應用。

目前,我正在嘗試處理結帳流程,其中包含一個OderFormViewController和一個CheckoutTableViewController,如下所示:

在此處輸入圖片說明

我通過拖動一個segue來連接兩者,如藍色突出顯示。 我還為我的segue添加了segue標識符。

我將第一個視圖控制器稱為E_OrderFormViewController (其標題為“發運地址”),並在其中為我的“繼續”按鈕創建了IBAction ,還使用了-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender來傳遞信息。

我也有一個Order模型,其中包含一些屬性。 在我的CheckoutTableViewController上,我將標簽和orderInfo設置為公共屬性,因此第一個視圖控制器可以訪問它。

#import <Foundation/Foundation.h>

@interface Order : NSObject

@property(strong, nonatomic) NSString *shippingName;
@property (strong, nonatomic) NSString *shippingAddress;
@property (strong, nonatomic) NSString *shippingCity;
@property(strong, nonatomic) NSString *shippingState;
@property(strong, nonatomic) NSString *shippingZip;


@end


//E_OrderFormViewController.m

#import "E_OrderFormViewController.h"
#import "F_CheckoutTableViewController.h"

...

#pragma mark - My Actions
- (IBAction)storePaymentInfoProceedToConfirmation:(id)sender {
  [self performSegueWithIdentifier:@"toCheckout" sender:self];
}

#pragma mark - Navigation
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

  if ([[segue identifier] isEqualToString:@"toCheckout"]) {
    F_CheckoutTableViewController *checkoutView = segue.destinationViewController;

    //Store Information and pass it to next view
    checkoutView.orderInfo.shippingName = self.txtFieldNameOnCard.text;

    NSLog(@"Shipping Name Stored: %@",checkoutView.orderInfo.shippingName);
  }

}

無論我在第一個textField中鍵入的任何文本,我的NSLog始終返回(空),這是我首先測試的文本。

這是我的CheckoutTableViewController ,具有其公共屬性。 這里列出了orderInfo 如上所述,我正在使用它傳遞信息:

//F_CheckoutTableViewController.h

#import <UIKit/UIKit.h>

@interface F_CheckoutTableViewController : UITableViewController

@property (strong, nonatomic)Order *orderInfo;

@end

在我的viewDidLoad ,在目標視圖控制器上,我做了:

//F_CheckoutTableViewController.m

@implementation F_CheckoutTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];

  //Load all information

  self.labelShippingName.text = self.orderInfo.shippingName;

  NSLog(@"Typed Name: %@",self.orderInfo.shippingName);

}

我只是將viewDidLoad粘貼為參考,因為我知道我的prepareForSegue NSLog沒有返回任何信息,信息也沒有傳遞。

我真的不知道錯誤在哪里。 我在StackOverFlow上搜索了幾個線程,但沒有一個對我有幫助,看起來很相似的一個是這個,但它對我的問題沒有幫助:

多個段之間未傳遞對象數據

這似乎很簡單,但是我犯了一些我找不到的錯誤。

非常感謝您的幫助。

orderInfo必須為null,因為您沒有對其進行初始化,因此無法設置其屬性...因此有2個選項:

checkoutView.orderInfo = [[OrderInfo alloc]init];
checkoutView.orderInfo.shippingName = self.txtFieldNameOnCard.text;

或從以下位置更改您的財產:

@property (strong, nonatomic)Order *orderInfo;

至:

@property (strong, nonatomic)NSString *shippingName ;

根據設置的情節提要,您在“收貨地址視圖控制器”中使用了“文本字段”,它可能會錯過“文本字段”對其控制器的委派。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM