我正在制作一款使用付款方式的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
总是返回(null),这是我首先测试的文本。
这是我的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
作为参考,因为我知道如果我NSLog
中的prepareForSegue
没有返回任何内容,则信息未被传递。
我真的不知道错误在哪里。我在StackOverFlow上搜索了几个主题,但是没有一个主题对我有帮助,一个看似相似的,就是这个,但它对我的问题没有帮助:
Multiple segues not passing Object data between themselves
这似乎很简单,但我犯了一些我找不到的错误。
我非常感谢你的帮助。
答案 0 :(得分:1)
orderInfo必须为null,因为您没有初始化它,因此您无法设置其属性...所以您有2个选项:
checkoutView.orderInfo = [[OrderInfo alloc]init];
checkoutView.orderInfo.shippingName = self.txtFieldNameOnCard.text;
或更改您的财产:
@property (strong, nonatomic)Order *orderInfo;
为:
@property (strong, nonatomic)NSString *shippingName ;