访问全局变量?

时间:2011-12-31 20:48:11

标签: objective-c cocoa-touch

我有以下代码登录Web服务并存储身份验证令牌:

loginViewController.h
@interface loginViewController : UIViewController<XMLRPCConnectionDelegate>
@property (strong, nonatomic) IBOutlet UITextField *SSO;
@property (weak, nonatomic) IBOutlet UITextField *PASS;
@property (weak, nonatomic) IBOutlet UITextView *LoginError;
@property (nonatomic, retain) NSString *token;
@end


loginViewcontroller.m
#import "loginViewController.h"

@implementation loginViewController
@synthesize SSO;
@synthesize PASS;
@synthesize LoginError;
@synthesize token;

- (IBAction)coreLoginClicked:(id)sender {

    NSURL *URL = [NSURL URLWithString: @"https://somesite"];  
    XMLRPCRequest *request = [[XMLRPCRequest alloc] initWithURL: URL];
    XMLRPCConnectionManager *manager = [XMLRPCConnectionManager sharedManager];

    [request setMethod:@"systemLogin"  withParameters:[NSArray arrayWithObjects: SSO.text, PASS.text, nil]];
    [manager spawnConnectionWithXMLRPCRequest: request delegate: self];

    NSLog(@"Request body: %@", [request body]);





}

- (void)request: (XMLRPCRequest *)request didReceiveResponse: (XMLRPCResponse *)response {

    if (![response faultCode]) {
        token = [response object];
        [self performSegueWithIdentifier:@"loginSegue" sender:self];


    NSLog(@"Response object: %@", [response object]);
}

我在成功登录后显示的视图控制器中有此代码:

loginViewController* login = [[loginViewController alloc] init];
NSLog(@"Token: %@", login.token);

login.token的值为nil。我在这做错了什么?这是设置和访问全局变量的错误方法吗?

我正在关注来自lynda.com的Objective-C教程,这样他们是如何做到的......但也许我错过了一些东西。

谢谢!

3 个答案:

答案 0 :(得分:1)

您正在分配一个新实例,这意味着它将为空。如果您希望能够在类中存储对象,则必须使用那个实例来获取变量。

答案 1 :(得分:1)

尝试通过self访问令牌:

NSLog(@"Token: %@", self.token);

答案 2 :(得分:1)

您的第二个代码位执行此操作:创建loginVC的新实例,然后检查它是否具有令牌。您需要实例化您的loginVC,然后进行登录,然后它将在令牌中具有值。无论实例化什么类/方法,loginVC都能够检查该标记的 loginVC的实例