目标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
答案 0 :(得分:4)
使用:
[ben setfirstName:@"Ben"];
因为您要将Ben设置为firstName。
希望它对你有所帮助。
答案 1 :(得分:2)
如果您对getter和setter([foo something]
和[foo setSomething:@"value"]
)使用括号语法,则自动创建的(或:合成的)setter以set
开头。因此,在您的情况下,您必须执行:[ben setFirstName:@"ben"]
另一种方法是为getter和setter(foo.something
和foo.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"];