我目前有一个带有按钮操作的类和ViewController,用于从文本字段中获取用户名和密码,并将它们放入自己的NSString中。然后我使用NSString来执行这样的发布请求。
NSString *user = _username.text;
NSString *password = _password.text;
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://thesite.com/login.php"]];
[httpClient setParameterEncoding:AFFormURLParameterEncoding];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST"
path:@"http://thesite.com/login.php"
parameters:@{@"username":user, @"password":password}];
AFHTTPRequestOperation * httpOperation = [httpClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
//success code
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//error handler
}];
[httpClient enqueueHTTPRequestOperation:httpOperation];
但是我有另一个类和Viewcontroller来执行get请求。但是,为了执行此get请求,我需要获取" NSString * user"来自第一个View Controller。我该怎么做呢?我应该在第一个Viewcontroller的头部声明一个NSString *用户,然后在第二个View控制器中声明第一个类的实例吗?
答案 0 :(得分:1)
您可以通过viewcontrollers传递字符串。因此,在两个viewcontroller之间制作一个segue,并将其命名为“secondVC”
当您想切换到其他视图时进行此次调用
[self performSegueWithIdentifier:@"secondVC"];
并实施此方法。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"secondVC"]) {
SecondViewController *second = (SecondViewController *)[segue destinationViewController];
second.userString = self.user;
}
}
答案 1 :(得分:1)
您可以使用NSUserDefaults存储用户名并在其他ViewControllers中使用。
例如,将其保存在当前的ViewController中。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:username forKey:@"UserName"];
[defaults synchronize];
在另一个ViewController中获取用户名。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *username = [defaults objectForKey:@"UserName"];
答案 2 :(得分:0)
将userName传递给第二个视图控制器。
您可以使用以下方法实现它。
尝试在初始化第二个ViewController时传递用户名,如
SecondViewController * sVC = [SecondViewController alloc] initWithUserName: username];
对于你的SecondViewController类,你必须修改init方法并添加userName属性{typeOF string}
@property (nonatomic, strong) NSString * userName
- (id) initWithUserName: (NSString *) name
{
self = [super initWithNibName: @"SecondViewController"
bundle: nil];
if (self)
{
self.userName = name;
}
return self;
}
享受!!
答案 3 :(得分:0)
像这样在第二类中创建第一类的对象..
//头等舱
//将值传递给seconClass
secondClass *appdelegate = [NSApp delegate];
[appdelegate initwithDetails:userName withPassword:password];
//第二课
//在第二个类中声明函数并获取值
//当你创建对象时,init函数将首先调用
-(id)initwithDetails:(NSString *)user withPassword:(NSString *)password
{
userName = [NSString stringWithFormat:@"%@", user];
newPass=[NSString stringWithFormat:@"%@", password];
return self;
}
答案 4 :(得分:0)
如果第一个viewcontroller是从第一个生成的,你可以创建一个委托协议和相应的委托,这样第一个是第二个委托,第二个是第一个委托:
这是一个包含一个方法的协议示例,请注意实例变量delegate的类型为id,因为在编译时它将不知道将采用此协议的类的类型。
#import <Foundation/Foundation.h>
@protocol ProcessDataDelegate <NSObject>
@required
- (void) processSuccessful: (BOOL)success;
@end
@interface ClassWithProtocol : NSObject
{
id <ProcessDataDelegate> delegate;
}
@property (retain) id delegate;
-(void)startSomeProcess;
@end
在上面定义的接口的实现部分中,我们需要至少做两件事 - 首先合成委托实例变量,然后根据需要调用协议中定义的方法(稍后会详细介绍)。 / p>
让我们看一下ClassWithProtocol.m的简单实现:
#import "ClassWithProtocol.h"
@implementation ClassWithProtocol
@synthesize delegate;
- (void)processComplete
{
[[self delegate] processSuccessful:YES];
}
-(void)startSomeProcess
{
[NSTimer scheduledTimerWithTimeInterval:5.0 target:self
selector:@selector(processComplete) userInfo:nil repeats:YES];
}
@end
了解详情