如何将字符串发送到另一个viewcontroller

时间:2014-01-24 06:51:05

标签: ios objective-c

我目前有一个带有按钮操作的类和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控制器中声明第一个类的实例吗?

5 个答案:

答案 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

this tutorial

了解详情