属性访问结果未使用但NSLog工作正常

时间:2014-08-08 12:58:26

标签: ios objective-c

我正在尝试在文本标签中显示结果,但是我得到的结果与NSLog不同:

if( [elementName isEqualToString:@"CommunityID"])
    {
        self.recordResults = FALSE;
        ResultLabel.text = @"CommunityID: %@", self.soapResults;
        NSLog(@"CommunityID:%@",self.soapResults);
        self.soapResults = nil;
    }

NSlog正确显示文本结果,但UILabel没有。错误显示:

“未使用属性访问结果 - 不应将getter用于副作用”

我不明白NSlog如何获得信息,但另一个没有?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您无法直接分配,您需要使用stringWithFormat属性

ResultLabel.text = [NSString stringWithFormat:@"CommunityID: %@", self.soapResults];

答案 1 :(得分:0)

只是让你知道发生了什么以及编译器警告的内容......

在C和Objective-C中,不在函数或方法调用中分隔参数的逗号(,)是逗号运算符。这是一个复合表达。评估左侧子表达式但丢弃其结果。然后,评估右手子表达式,并且整个复合表达式取其值。

在您的情况下,复合表达式仅用作语句,并且未使用其结果。所以,你的陈述:

ResultLabel.text = @"CommunityID: %@", self.soapResults;

相当于:

ResultLabel.text = @"CommunityID: %@";
self.soapResults;

这些语句中的第二个调用属性getter并丢弃结果值。编译器警告你。要么你不是故意这样做(就像在这种情况下)或者你正在调用getter,因为getter有你想要的副作用,这是一个非常糟糕的主意。