没有可见性@interface for Person

时间:2013-05-01 19:32:06

标签: ios objective-c

目标C新手在这里:我的主要是在下面。问题:为什么我会收到这个臭名昭着的错误消息:“没有生存能力@interface for person声明选择器firstName”

<。> .m文件包含@synthesize firstName,lastName;

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

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

 ben.firstName=@"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

4 个答案:

答案 0 :(得分:4)

使用:

 [ben setfirstName:@"Ben"];      

因为您要将Ben设置为firstName。

希望它对你有所帮助。

答案 1 :(得分:2)

如果您对getter和setter([foo something][foo setSomething:@"value"])使用括号语法,则自动创建的(或:合成的)setter以set开头。因此,在您的情况下,您必须执行:[ben setFirstName:@"ben"]

另一种方法是为getter和setter(foo.somethingfoo.something = @"value")使用点语法,而不必使用set前缀。在这种情况下,您执行ben.firstName = @"ben"

答案 2 :(得分:2)

在objective-c中如果你有一个名为firstName的属性,你可以用两种方式获取/设置它

获取

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

设置

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

答案 3 :(得分:2)

使用setter方法,不要忘记@符号来构建NSString s:

[ben setFirstName:@"Ben"];