2011-10-06 3 views
0

하나의보기에서 UITextField에 우편 번호 값을 설정하는 응용 프로그램이 있습니다. 보기를 전환 할 때 해당 값을 UILabel로 표시하고 싶습니다. 하나의보기 컨트롤러 내에서이 작업을 수행하는 방법을 알고 있지만 둘 사이에는 작업을 수행 할 수 없습니다. 나는 'zip code value'를 'globals.h'라는 헤더 파일에서 상수 문자열로 설정하려고 시도했다가 다시 호출했지만 항상 충돌합니다. 다음은 몇 가지 코드 샘플은 다음과 같습니다NSString 값을 다른보기 컨트롤러로 가져 오는 방법은 무엇입니까?

#import <Foundation/Foundation.h> 

@interface globals 

extern NSString *zipCodeValue; 

@end 

이것은 globals.m 파일입니다 :

#import "globals.h" 

@implementation globals 

NSString *zipCodeValue = @"default value"; 

@end 

이것은 첫 번째보기가가 (우편 번호

이는 globals.h 파일입니다 텍스트 필드에 입력됩니다. 인터페이스 및 구현 모두) :

#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)에서 적용하려고하면 레이블에 아무런 영향을 미치지 않습니다. 이것은 내가 사용하는 방법이다 (필자는 헤더 파일에 이름, 'zipCodeEntry은'나는 초기화라는 이름과 인터페이스 빌더에서 대상에 연결된 UILabel의입니다) :

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

내가 가지고, 지금은 완전히 혼란 스러워요 내가이 일을 처음 접한 이래로 내 뇌가 뭔가를 놓치고 있다고 믿는 이유. 죄송합니다. 오래 걸리면 아무것도 남기고 싶지 않습니다. 나는 분명히 초보자입니다. AGGGG !!!

+1

무엇 당신의 앱 위임에 zipCodeValue를 저장에 대한 위치를 모든 viewcontroller에서 액세스 할 수 있습니까? –

+0

"MillersAppAppDelegate.h"인 App Delegate에 저장하고 ZipCodeEntryViewController.m 파일에 헤더 파일을 가져 와서이를 시도했습니다. zipCodeValue에 액세스 할 수 없었습니다 (입력 할 때처럼 사용 가능한 옵션이라는 예측 텍스트가 없습니다). – MillerMedia

+0

그래, 나는 그것을 어떻게 내 App Delegate에 저장 한 다음 그것을 액세스하는지 알아 냈다. 고마워, 그냥 어떻게 해야할지 읽어 보았어! – MillerMedia

답변

2

에 한번 사용 NSUserDefaults :

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

그리고 그것을로드 :

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

당신은로드 앱에서 사방에 저장할 수 있습니다

+0

나는 지금 혼란스러워 하하. 전역 파일의 메서드에서 NSUserDefaults 코드를 설정했지만 ZipCodeEntryViewController.m에서이 코드를로드하려고하면 "ud"가 이전에 선언 된 것과 같은 것을 인식하지 못합니다. 나는 그들을 잘못된 파일에 넣었습니까? – MillerMedia

+0

각 ViewController에서 선언해야합니다 : NSUserDefauls * ud = [NSUserDefaults standardUserDefaults]; –

+0

원래 응답에 넣은 원본 NSUserDefaults 코드는 어디에 선언해야합니까? 글로벌 구현 파일에서이 작업을 수행 했습니까? 나는 그 코드가 원래 어디에 위치하는지 혼란 스럽다. – MillerMedia

관련 문제