从控制器传递值到控制器
我正在构建我的第一个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
如果您有您呈现一个SettingsController
赛格瑞,通过它在prepareForSegue
需要的信息。不要创建新的本地SettingsController
。
但我需要在设置视图到Web服务器的一些职位。没有专用的'SettingsController'可能吗? – user4114789 2014-10-10 19:17:35
您将拥有一个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);
}
我实现了你的代码,但现在它崩溃在这一行上:'_xAuthToken = [jsonData [@“token”] stringValue];' – user4114789 2014-10-10 19:51:04
现在我得到'终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [UINavigationController setXAuthToken:]:发送到实例0x79837530的无法识别的选择器 – user4114789 2014-10-10 20:28:38
您正试图分配一个值' self.viewController',但是你还没有为此提供属性定义。 – 2014-10-10 18:08:59