从控制器传递值到控制器

问题描述:

我正在构建我的第一个iOS应用程序来尝试和学习iOS编码。但是,我需要从一个控制器向另一个传递值xAuthToken。我似乎无法得到它的工作。我初始化了第一个控制器ViewController中的值,但是我需要它在SettingsController中。我不断收到错误,现在抛出的错误是:Property 'ViewController' not found on object of type 'ViewController'从控制器传递值到控制器

我在做什么错?

ViewController.h

#import <UIKit/UIKit.h> 
#import "SettingsController.h" 

@interface ViewController : UIViewController <UITextFieldDelegate> 
@property (weak, nonatomic) IBOutlet UITextField *txtUsername; 
@property (weak, nonatomic) IBOutlet UITextField *txtPassword; 

- (IBAction)sigininClicked:(id)sender; 

- (IBAction)backgroundTap:(id)sender; 
@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@property (nonatomic) NSString *xAuthToken; 

@end 

@implementation ViewController 

- (IBAction)sigininClicked:(id)sender { 

    NSString *xAuthToken = @"0"; 

    self.viewController = [[SettingsController alloc] init]; 
    self.viewController.xAuthToken = xAuthToken; 
    [self performSegueWithIdentifier:@"login_success" sender:self]; 

} 

SettingsController.h

#import <Foundation/Foundation.h> 

@interface SettingsController : UIViewController 

@end 

SettingsController.m

@interface SettingsController() 

@property (weak, nonatomic) IBOutlet UITextField *myTextField; 
@property (weak, nonatomic) IBOutlet UISwitch *mySwitch; 

@end 

@implementation SettingsController 

//THIS IS WHERE I NEED XAUTHTOKEN 
+0

您正试图分配一个值' self.viewController',但是你还没有为此提供属性定义。 – 2014-10-10 18:08:59

如果您有您呈现一个SettingsController赛格瑞,通过它在prepareForSegue需要的信息。不要创建新的本地SettingsController

+0

但我需要在设置视图到Web服务器的一些职位。没有专用的'SettingsController'可能吗? – user4114789 2014-10-10 19:17:35

+0

您将拥有一个SettingsController,假设这是您的segue创建的。我的意思是,不要在代码中创建不同的代码。 – 2014-10-10 19:20:16

你可以做这样的事情

viewController = [self.storyboard instantiateviewcontrollerwithidentifier:@"your vc name"]; 
viewController.Xauthtoken = data; 
// Do something else with this. 

或者另一种方式(我不知道这是否是好还是坏,使用它,而你的VC已经被激活): 使用NSNotificationCenter和它之间传递值。

第三种方法是为第一个Viewcontroller创建委托。

在ViewController.m试试这个:

#import "ViewController.h" 

@interface ViewController() 

@property (nonatomic) NSString *xAuthToken; 

@end 

@implementation ViewController 

- (IBAction)sigininClicked:(id)sender { 
    xAuthToken = @"Your Value Here"; 
    [self performSegueWithIdentifier:@"login_success" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"login_success"]) { 
     SettingsController *destViewController = segue.destinationViewController; 
     destViewController.xAuthToken = xAuthToken; 
    } 
} 

而在你SettingsController.h

#import <Foundation/Foundation.h> 

@interface SettingsController : UIViewController 

@property (nonatomic,strong) NSString *xAuthToken; 

@end 

SettingsController.m

@interface SettingsController() 

@property (weak, nonatomic) IBOutlet UITextField *myTextField; 
@property (weak, nonatomic) IBOutlet UISwitch *mySwitch; 

@end 

@implementation SettingsController 

-(void)viewDidLoad{ 
    NSLog("%@",xAuthToken); 
} 
+0

我实现了你的代码,但现在它崩溃在这一行上:'_xAuthToken = [jsonData [@“token”] stringValue];' – user4114789 2014-10-10 19:51:04

+0

现在我得到'终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [UINavigationController setXAuthToken:]:发送到实例0x79837530的无法识别的选择器 – user4114789 2014-10-10 20:28:38