尝试使用NSString和NSLog更改标签文本时,此代码有什么问题?

时间:2014-05-17 22:47:33

标签: ios objective-c

我试图做一些非常简单的事情,我试图将标签改为"我喜欢说嗨"单击按钮。我已经知道如何在没有NSString的情况下做到这一点,但是我想让它变得更难但我无法发现这个代码有什么问题它不起作用。

- (IBAction)button:(id)sender{
    NSString *hi = @"hi";
    _label.text = NSLog(@"I like to say %@", hi);
}

我还试图做一些更复杂的事情并使用像这样的void语句 这会有用吗,如果不是它的错误

- (void)num{
int num = 42;
}

- (IBAction)button:(id)sender{
    _label.text = NSLog(@"I like to say %i", num);
}

2 个答案:

答案 0 :(得分:2)

为什么要尝试使用NSLog?这是为了在日志中显示消息。

您想要NSString stringWithFormat:

_label.text = [NSString stringWithFormat:@"I like to say %@", hi);

由于NSLog函数未返回NSString值,因此您甚至无法编译。

答案 1 :(得分:2)

NSLog是一个void返回类型的函数,这意味着它不会返回任何值,因此您无法使用它来分配属性的值。它仅用于将消息打印到调试控制台或设备日志。您可能正在寻找的是stringWithFormat:

_label.text = [NSString stringWithFormat:@"I like to say %@", hi];

这是NSString类的方法。它构造类似于NSLog的字符串,但它实际上返回一个可以分配给属性的新NSString值,依此类推。

Read its documentation here。您将一直使用此方法和其他NSString方法。


关于您的其他代码:

如果你想构建一个名为num的方法,它产生一个你可以在别处使用的值,你需要声明它返回的值的类型,而不是使用void

- (int)num{
    return 42;
}

现在num是一个正确的实例方法。您需要调整代码才能正确访问此方法:

- (IBAction)button:(id)sender{
    _label.text = [NSString stringWithFormat:@"I like to say %i", [self num]];
}

您将发送消息 num发送到self。松散地说,关键字self是对当前对象实例的引用。因此[self num]将调用您定义的num方法,并返回其值。您可能需要阅读Programming with Objective-C以了解有关这些概念的更多信息。