我有一个应用程序,我在一个视图上的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 !!!
答案 0 :(得分:2)
尝试使用NSUserDefaults:
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:zipCodeValue forKey:@"myKey"];
[ud synchronize];
加载它:
NSString *a = [ud objectForKey:@"myKey"];
您可以在应用中的任何位置加载并保存它