Как импортировать значение NSString в другой контроллер представления? - PullRequest
0 голосов
/ 07 октября 2011

У меня есть приложение, в котором я устанавливаю значение почтового индекса в UITextField для одного представления.Когда я переключаю представления, я бы хотел, чтобы это значение отображалось как UILabel.Я знаю, как сделать это в одном контроллере представления, но не между двумя.Я попытался установить 'значение почтового индекса' в константную строку в заголовочном файле с именем '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

Это первыйview (где почтовый индекс вводится в текстовое поле. И интерфейс, и реализация):

#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), он ничего не делает с меткой.Это метод, который я использовал (я назвал его в заголовочном файле; zipCodeEntry - это UILabel, который я назвал инициализированным и подключенным к цели в Интерфейсном Разработчике):

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

Теперь я полностью сбит с толку,У меня есть основания полагать, что мой мозг что-то упустил, так как я новичок в этом.Извините, если это многословно, я не хотел ничего упускать.Я явно начинающий.AGGGG !!!

1 Ответ

2 голосов
/ 07 октября 2011

Попробуйте использовать NSUserDefaults:

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

И загрузить его:

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

Вы можете загрузить и сохранить его везде в своем приложении

...