0

我正在尝试从我的模型对象 ( searchRecipeDetailsVariable) 的属性之一中设置标签的文本,但出现错误

//Extract number of servings from dictionary and place in model
self.searchedRecipeDetailsVariable.numberOfServings = [self.detailedSearchYummlyRecipeResults objectForKey: @"numberOfServings"];
//log number of servings to check that it works
NSLog(@"Number of Servings, %@",self.searchedRecipeDetailsVariable.numberOfServings);
self.numberOfServingsLabel.text = self.searchedRecipeDetailsVariable.numberOfServings;

当我打印值时,我可以正确看到数字。但是,当我尝试设置时,numberOfServingsLabel.text我收到错误:

-[__NSCFNumber isEqualToString:]:无法识别的选择器发送到实例 0x9028390

你可以想象,我不太清楚为什么。我尝试使用字符串直接设置文本,如下所示,这很有效。

self.numberOfServingsLabel.text = @"500";

然后为了测试我确实有一个字符串,我尝试了下面的。这工作正常。

NSString *test = self.searchedRecipeDetailsVariable.numberOfServings;
NSLog(@"test numberof servings string, %@", test);

当我将鼠标悬停在 上时test,我打印了描述。我不知道它是否有用,但它是:

测试打印说明:2

当我将鼠标悬停在它上面时,它确实说它是一个NSString *,最后它有(int)2。不确定这意味着什么。

4

1 回答 1

4
-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x9028390

就像在任何其他情况下一样,错误消息是描述问题的有意义的英文句子。它告诉你这self.searchedRecipeDetailsVariable.numberOfServings是一个NSNumber. 不管你声明它为NSString,因为 Objective-C 是动态类型的(对象的编译时类型声明只是为了给编译器提示,它可能与现实无关)。

您需要将其转换为字符串,可能使用NSNumberFormatter(正确的方式)或获取其描述(不推荐,永远不要依赖描述)等。例如:

NSString *test = [NSString stringWithFormat:@"%d",
    self.searchedRecipeDetailsVariable.numberOfServings.intValue];
于 2013-04-28T12:10:36.333 回答