2013-05-01 2 views
0

목표 C newbie이 (가) 있습니다. 내 int main이 아래에 있습니다. 질문 :이 악명 높은 오류 메시지가 나타나는 이유는 무엇입니까? "생존력 없음 @interface person의 경우 selector firstName을 선언합니다."사람에 대한 가시성 @interface가 없습니다

.m 파일의 이름은 firstName, lastName입니다.

#import <UIKit/UIKit.h> 
#import "AppDelegate.h" 
#import "Person.h" 

int main(int argc, char *argv[]) 
{ 
Person *ben = [[Person alloc] init]; 

[email protected]"Ben"; 
NSLog(@"--->%@",ben.firstName); //output ---->Ben 

[ben firstName:"Ben"];  //RED ERR: no visibility @interface for Person 
} 

.H

#import <Foundation/Foundation.h> 


@interface Person : NSObject 
{ 
    NSString *firstName; 
    NSString *lastName; 
} 

@property (nonatomic, copy) NSString *firstName; 
@property (nonatomic, copy) NSString *lastName; 

- (NSString *) fullName; 
-(void) sayHello; 

@end 

하는 .m

#import "Person.h" 

@implementation Person 
@synthesize firstName, lastName; 

-(void) sayHello 
{ 
    NSLog(@"Hello"); 
} 

- (NSString *) fullName 
{ 
    return [NSString stringWithFormat:@"%@ %@", [self firstName], [self lastName]]; 
} 

@end 
+0

"Foundation.h"에서 가져 오기 때문에 "NSObject.h"또는 "NSString.h"를 가져올 필요가 없습니다. – Macro206

+1

알 것. 감사! – adhg

답변

4

사용 :

[ben setfirstName:@"Ben"];  

당신이 firstName을 벤를 설정하고 있기 때문이다.

희망이 있으면 도움이됩니다.

+0

확인 : [ben setfirstName : @ "Ben"]; 감사! – adhg

+0

음 .. 가장 환영합니다 :-) –

2

getters 및 setter ([foo something][foo setSomething:@"value"])에 대괄호 구문을 사용하는 경우 자동으로 생성 된 (또는 : 합성 된) setter는 set으로 시작합니다. [ben setFirstName:@"ben"]

대안이 getter 및 setter (foo.somethingfoo.something = @"value")에 대한 도트 구문을 사용하는 것입니다, 당신은 세트 접두사를 사용할 필요가 없습니다 : 그래서, 당신의 경우에, 당신은해야 할 것입니다. 당신이 이름 firstName을 가진 속성이있는 경우 어떤 경우에, 당신은 목표 - C에서 ben.firstName = @"ben"

2

을, 당신은

obj.firstName = @"First Name"; 
[obj setFirstName:@"First Name"]; 

NSString *firstName = obj.firstName; 
NSString *firstName = [obj firstName]; 

세트를 가져옵니다 두 가지 방법

에서 설정/얻을 수 있습니다

2

setter 메서드를 사용하고 @ 기호를 잊어서 NSString을 구성하지 마십시오.

[ben setFirstName:@"Ben"]; 
관련 문제