0

目标 C 新手在这里:我的 int main 在下面。问题:为什么我会收到这条臭名昭著的错误消息:“No viability @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

他们

#import "Person.h"

@implementation Person
@synthesize firstName, lastName;

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

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

@end
4

4 回答 4

4

利用 :

 [ben setfirstName:@"Ben"];      

因为您将 Ben 设置为 firstName。

希望它可以帮助你。

于 2013-05-01T19:35:44.640 回答
2

如果您对 getter 和 setter([foo something][foo setSomething:@"value"])使用括号语法,则自动创建(或:合成)的 setter 以set. 所以,在你的情况下,你必须这样做:[ben setFirstName:@"ben"]

另一种方法是对您的 getter 和 setter(foo.somethingfoo.something = @"value")使用点语法,并且您不必使用 set 前缀。在这种情况下,你做ben.firstName = @"ben"

于 2013-05-01T19:37:01.403 回答
2

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

得到

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

obj.firstName = @"First Name";
[obj setFirstName:@"First Name"];
于 2013-05-01T19:37:39.993 回答
2

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

[ben setFirstName:@"Ben"];
于 2013-05-01T19:38:33.500 回答