2011-10-06 59 views
0

我有一個應用程序,我在一個視圖中設置UITextField中的郵政編碼值。當我切換視圖時,我希望將該值顯示爲UILabel。我知道如何在一個視圖控制器內完成此操作,但不是在兩個視圖控制器之間。我試圖在名爲'globals.h'的頭文件中將'郵編值'設置爲一個常量字符串,然後調用它,但它總是崩潰。下面是一些示例代碼:如何將NSString值導入到不同的視圖控制器?

這是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]; 
} 

所以,在這個點t(它會正確記錄)。我假設常量變量'zipCodeValue'將繼續保留它的設定值,即使視圖控制器已經改變。但是當我試圖將它應用於新的視圖控制器(AddressViewController)時,它對標籤沒有任何作用。這是我所使用的方法(I命名它在頭文件;「zipCodeEntry」是我命名初始化和在界面生成器連接到目標的的UILabel):

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

我現在徹底困惑,我有理由相信我的大腦缺少一些東西,因爲我是新手。對不起,如果這是囉嗦,我不想留下任何東西。我顯然是一個初學者。 AGGGG!

+1

怎麼樣在應用程序委託存儲zipCodeValue在那裏你可以從任何視圖控制器訪問? –

+0

我試圖通過將它存儲在我的App Delegate中,它是「MillersAppAppDelegate.h」,然後將頭文件導入到ZipCodeEntryViewController.m文件中。它不允許我訪問zipCodeValue(就像我去鍵入它時,它沒有預測性文本表明它是可用選項)。 – MillerMedia

+0

好吧,我想出瞭如何將它存儲在我的App Delegate中,然後訪問它。謝謝,只需要閱讀如何做到這一點! – MillerMedia

回答

2

使用try NSUserDefaults的:

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

並將其裝載到:

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

您可以加載到處保存在您的應用程序

+0

我現在很困惑哈哈。我已經在全局文件中的一個方法中設置了NSUserDefaults代碼,但是當我將它加載到ZipCodeEntryViewController.m中時,它不會將「ud」識別爲之前已聲明的內容。我把它們放在錯誤的文件中嗎?您必須聲明每個ViewController中的 – MillerMedia

+0

:NSUserDefauls * ud = [NSUserDefaults standardUserDefaults]; –

+0

我在哪裏可以聲明原始答案中的原始NSUserDefaults代碼?這是在全局實現文件中完成的嗎?我很困惑,代碼原來放在哪裏。 – MillerMedia

相關問題