isEqualToString的无法识别的选择器错误:设置标签的文本时

时间:2013-04-28 12:05:29

标签: ios objective-c cocoa-touch nsstring unrecognized-selector

我正在尝试从我的模型对象(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。不确定这意味着什么。

1 个答案:

答案 0 :(得分:4)

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

就像在任何其他情况下一样,错误消息是描述问题的有意义的英语句子。它告诉您self.searchedRecipeDetailsVariable.numberOfServingsNSNumber。无论你将它声明为NSString,因为Objective-C是动态类型的(对象的编译时类型声明只是为了给编译器提供提示,它可能与实际无关)。 / p>

您需要将其转换为字符串,可能使用NSNumberFormatter(正确方式),或获取其描述(不建议使用,描述永远不会依赖)等。例如:< / p>

NSString *test = [NSString stringWithFormat:@"%d",
    self.searchedRecipeDetailsVariable.numberOfServings.intValue];