2012-02-16 3 views
0

이 코드를 컴파일하려고하면이 오류가 발생합니다. 인터페이스의 속성 선언에 무엇을 추가해야합니까? textBox가 인스턴스 변수 인 경우 속성으로 선언해야하는 이유는 무엇입니까?속성 구현시 인터페이스에 선언이 있어야합니다.

ViewController.h

#import <UIKit/UIKit.h> 

@interface TNRViewController : UIViewController { 

    IBOutlet UITextField *textBox; 
    IBOutlet UILabel *label; 
} 
- (IBAction)button:(id)sender; 

@end 

ViewController.m

#import "TNRViewController.h" 

@implementation TNRViewController 
@synthesize textBox; 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)dealloc { 
    [textBox release]; 
    [label release]; 
    [super dealloc]; 
} 
- (IBAction)button:(id)sender { 
    NSString *Name = textBox.text; 
    NSString *Output = Nil; 
    Output = [[NSString alloc] initWithFormat:@"%@ says: Hello World!", Name]; 
    label.text = Output; 
    [Output release]; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [textBox resignFirstResponder]; 
    return YES; 
} 
@end 

답변

1

텍스트 상자는 당신이 당신의 구현을 @synthesizing 때문에 속성으로 선언 될 필요가있다.

  1. 이 인터페이스에서 텍스트 상자의 @property 선언을 추가

    당신은 할 중 하나가 필요합니다.

  2. 또는 setter/getter 메소드가 필요하지 않은 경우 구현에서 @sythesize 행을 제거 할 수 있습니다.

+0

감사를 텍스트 필드에 액세스합니다. @synthesize 행을 제거한 후에 작동합니다. – pdenlinger

1

구현시 @synthesize textBox을 작성하면 컴파일러에서 자동으로 2 가지 방법을 생성합니다.

-(UITextField*)textBox 
-(void)setTextBox:(UITextField *)textBox 

액세스 할 수있는 클래스 '인터페이스에서 정의해야합니다. iPhone 용 Objective-C는이 두 가지 방법 인 @property 지시어를 선언하기위한 멋진 지름길을 가지고 있습니다. 또한이 지시문에 변수를 저장하는 방법에 대한 정보를 포함 할 수도 있습니다.

@property (nonatomic, retain) IBOutlet UITextField * textBox 

텍스트 필드에 IBOutlet을 제공 할 수 있습니까? 또한 위의 2 가지 방법에 대한 입장이기도합니다. TextBox가 클래스에 의해 유지된다는 것을 알려줍니다. 변수에 setter 및 getter 메서드를 항상 사용하면 안전하지 않을 수도있는 객체를 해제하고 나중에 인스턴스 변수를 참조하는 것을 피할 수 있습니다. 이를 수행하는 것이 가장 좋습니다. 당신은 설명 (위의 라인은 동일합니다)

[self.textBox setText:@"aString"]; 
self.textBox.text = @"aString"; 

를 수행하여 클래스 내에서

+1

2 개의 접근 자 외에도'@ synthesize'는 자신 만의 선언이 없으면 인스턴스 변수 선언을 생성합니다. 이것은'@ property'와'@ synthesize'에 익숙해지면 더 이상 자신의 변수 선언을 쓰지 않을 것임을 의미합니다. – herzbube

관련 문제