首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无可见性@人机界面

无可见性@人机界面
EN

Stack Overflow用户
提问于 2013-05-01 19:32:06
回答 4查看 85关注 0票数 0

目标C新手在这里:我的int main在下面。问:为什么我会收到这样一条臭名昭著的错误消息:"No生存力@ person声明选择器firstName"

.m文件包含@合成firstName,lastName;

代码语言:javascript
复制
#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  
}

the .h

代码语言:javascript
复制
#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

the .m

代码语言:javascript
复制
#import "Person.h"

@implementation Person
@synthesize firstName, lastName;

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

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

@end
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-01 19:35:44

用途:

代码语言:javascript
复制
 [ben setfirstName:@"Ben"];      

因为你要把Ben设置为firstName。

希望它能帮到你。

票数 4
EN

Stack Overflow用户

发布于 2013-05-01 19:37:01

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-05-01 19:37:39

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

到达

代码语言:javascript
复制
NSString *firstName = obj.firstName;
NSString *firstName = [obj firstName];

设置

代码语言:javascript
复制
obj.firstName = @"First Name";
[obj setFirstName:@"First Name"];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16325049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档