在我的.m文件中,我创建了以下属性:
@property(strong) NSString *var;
我试着给它分配一个字符串:
- (void)viewDidLoad {
[super viewDidLoad];
[self.var getstring];
}//viewDidLoad
-(NSString *)getstring{
return @"hello";
}
但它给了我错误" NSString没有可见的@interface声明了选择器getString
答案 0 :(得分:0)
- (void)viewDidLoad {
[super viewDidLoad];
self.var = [self getstring];
}//viewDidLoad
-(NSString *)getstring{
return @"hello";
}
函数调用到同一个ViewController,我们使用[self methodName]如果返回任何某个值,则需要捕获该值 用" ="分配值。
因此,您需要将此代码[self.var getstring];
替换为self.var = [self getstring];
答案 1 :(得分:0)
你只需要分配字符串
self.var = [self getstring]
代替:
[self.var getstring];
答案 2 :(得分:0)
[self.var getstring]
上面的代码发送消息/"调用" getstring选择器/"方法" in var,其类型为NSString
。 NSString
没有这样的选择器可以解释您的错误:
NSString
没有可见的@interface声明了选择器getString
要将getstring
的结果分配给属性var
,您需要写一下:
self.var = [self getstring];
注意强>
Objective-C不鼓励使用get预先添加方法。您可以调用方法-(NSString *) helloString
答案 3 :(得分:0)
问题是这些方括号表示“向此对象发送消息”(obj-c msg send)。你是做什么?您向var发送消息。你的var是Nsstring类的一个实例,而后者没有名为getstring的方法。这就是错误实际上说的。所以,我的想法是:
答案 4 :(得分:0)
当你不使用@ synthesize时,getter和setter方法不会重写。换句话说,你只能使用系统的getter和setter方法。但是当你使用@ synthesize时,你可以重写getter和setter方法。 / p>
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic)NSString *age;
@end
@implementation ViewController
@synthesize age = _age;
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)setAge:(NSString *)age {
_age = age;
}
-(NSString *)age
{
return _age;
}
@end