如何将NSString值导入不同的视图控制器?

时间:2011-10-06 21:58:35

标签: xcode global-variables constants uilabel

我有一个应用程序,我在一个视图上的UITextField中设置一个邮政编码值。当我切换视图时,我希望该值显示为UILabel。我知道如何在一个视图控制器中执行此操作,我试图将'zip code value'设置为名为'globals.h'的头文件中的常量字符串,然后调用它,但它总是崩溃。以下是一些代码示例:

这是globals.h文件:

#import <Foundation/Foundation.h>

@interface globals 

extern NSString *zipCodeValue;

@end

这是globals.m文件:

#import "globals.h"

@implementation globals

NSString *zipCodeValue = @"default value";

@end

这是第一个视图(将邮政编码输入文本字段。界面和实现):

#import <UIKit/UIKit.h>


@interface ZipCodeEntryViewController : UIViewController <UITextFieldDelegate> {
    UITextField *zipCode;
    UIButton *doneButton;
}
@property (nonatomic, retain) IBOutlet UITextField *zipCode;
@property (nonatomic, retain) IBOutlet UIButton *doneButton;

-(IBAction) tapBackground:(id)sender;
-(IBAction) doneButtonClick:(id)doneButton;

@end

#import "ZipCodeEntryViewController.h"
#import "MillersAppAppDelegate.h"
#import "AddressViewController.h"
#import "globals.h"
#define MAX_LENGTH 5

@implementation ZipCodeEntryViewController
@synthesize zipCode, doneButton;

-(IBAction) doneButtonClick:(id)doneButton{
    MillersAppAppDelegate *delegate = (MillersAppAppDelegate *)[[UIApplication     sharedApplication] delegate];
    AddressViewController *addressView = [[AddressViewController     alloc]initWithNibName:@"AddressViewController" bundle:nil];
    [delegate switchViews:self.view toView:addressView.view];
    //using the global string to store the text field content
    zipCodeValue=zipCode.text;
    //the button is clicked and the view changes to addressView while NSLogging the correct value. So far, so good.
    NSLog(@"%@", zipCodeValue); 
    [addressView release];
}

-(IBAction) tapBackground:(id)sender{
    [zipCode resignFirstResponder];
}

所以,此时一切正常(它正确记录)。我假设常量变量'zipCodeValue'将继续保持它的设定值,即使视图控制器已经改变。但是当我尝试在新的视图控制器(AddressViewController)中应用它时,它对标签没有任何作用。这是我所使用的方法(I命名它在头文件;“zipCodeEntry”是我命名初始化和连接到所述目标在界面生成器的UILabel):

-(void)setZipCode{
zipCodeEntry.text=zipCodeValue;
}

我现在已经彻底困惑了,我有理由相信我的大脑因为我刚接触到这个而失去了一些东西。对不起,如果这是啰嗦,我不想遗漏任何东西。我显然是初学者。 AGGGG !!!

1 个答案:

答案 0 :(得分:2)

尝试使用NSUserDefaults:

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:zipCodeValue forKey:@"myKey"];
[ud synchronize];

加载它:

NSString *a = [ud objectForKey:@"myKey"];

您可以在应用中的任何位置加载并保存它