0

モデル オブジェクト ( ) のプロパティの 1 つからラベルのテキストを設定しようとしていますが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 に答える