新的ios - 无法将字符串分配给属性

时间:2015-07-23 11:31:18

标签: ios objective-c

在我的.m文件中,我创建了以下属性:

@property(strong) NSString *var;

我试着给它分配一个字符串:

- (void)viewDidLoad {
    [super viewDidLoad];

   [self.var getstring];

}//viewDidLoad

-(NSString *)getstring{


    return @"hello";

}

但它给了我错误" NSString没有可见的@interface声明了选择器getString

5 个答案:

答案 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,其类型为NSStringNSString没有这样的选择器可以解释您的错误:

  

NSString没有可见的@interface声明了选择器getString

要将getstring的结果分配给属性var,您需要写一下:

self.var = [self getstring];

注意

Objective-C不鼓励使用get预先添加方法。您可以调用方法-(NSString *) helloString

答案 3 :(得分:0)

问题是这些方括号表示“向此对象发送消息”(obj-c msg send)。你是做什么?您向var发送消息。你的var是Nsstring类的一个实例,而后者没有名为getstring的方法。这就是错误实际上说的。所以,我的想法是:

  1. 将字符串分配给var的正确方法是self.var = [self getstring]
  2. 最好使用驼峰式编码。所以方法名称看起来像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