0

Я пытаюсь установить текст этикетки от одного из свойств моей модели объекта (searchRecipeDetailsVariable), но я получаю сообщение об ошибкеошибка Непризнанного селектора для isEqualToString: при установке текста этикетки

//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:]: unrecognized selector sent to instance 0x9028390

Как вы можете себе представить, я не слишком уверен, почему. Я попытался установить текст непосредственно со строкой, как показано ниже, и это работает.

self.numberOfServingsLabel.text = @"500"; 

Затем, чтобы проверить, у меня действительно была строка, которую я попробовал ниже. Это прекрасно работает.

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

Когда я парить над test, я напечатал описание. Я не знаю, будет ли это полезно, но это было:

Printing description of test: 2

Когда я парить над ним, он сказал, что это NSString * и в конце концов он имеет (int)2. Не уверен, что это значит.

ответ

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]; 
+0

Спасибо. Я пробовал, и это работает. Подумайте, мне нужно немного почитать об этом. – Anthony