web-dev-qa-db-ja.com

[NSCFNumber isEqualToString:]:認識されないセレクターがインスタンスに送信されました

さて、私は次の一般的な問題を抱えています

[NSCFNumber isEqualToString:]: unrecognized selector sent to instance

しかし、今回はそれを修正する方法がわかりません。

これがviewDidLoad:の宣言です

- (void)viewDidLoad {

    [super viewDidLoad];

    NSMutableArray *tempHours = [NSMutableArray array];
    for (int i = 0; i < 12; i++) { 
        [tempHours addObject:[NSNumber numberWithInt:(i+1)]];
    }
    self.hours = tempHours; // 'hours' is a synthesized NSArray property of the ViewController
    [tempHours release];

  // two more similar array declarations here

}

以下は、UIPickerViewのコードメソッドです。ここでは、問題が発生します(例:ifステートメント)。

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

    NSString *stringIndex = [NSString stringWithFormat:@"Row #%d", row];

    if(component == 0) {
        return stringIndex = [self.hours objectAtIndex:row];
    }

    // more code for other components (of the same form) here

    return stringIndex;
}

NSNumberオブジェクトのNSArrayを文字列として型キャストする必要があると思います。そのステートメントでそれを適切に行う方法:

stringIndex = [self.hours objectAtIndex:row];

ありがとう!

27
ArtSabintsev
return [NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];
45
Paul Tiarks

self.hoursに保持されているNSNumberが返されます。 NSStringは期待される戻り値なので、次の方法で文字列を作成する必要があります。

[NSString stringWithFormat:@"%@", [self.hours objectAtIndex:row]];

またはあなたの意図を再評価します。実際にこの方法でインデックスを保存しますか、それともNSStringsを保存しますか?

8
MarkPowell

誰かがこの問題を抱えており、具体的には行のインデックスを返している場合は、次のようにして常にNSNumberをstringValueに変換できます。

NSString *code = [[[JSONResponse objectForKey:@"meta"] objectForKey:@"code"] stringValue];

メソッドの最後にstringValueを配置すると、すべてが文字列に変換されます。intValueを使用することもできます。

3
jcrowson

コメント[tempHours release]; //それは自動解放オブジェクトです。あなたは使用せず、allocまたはcopyまたはnewを使用しました:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray *tempHours = [NSMutableArray array];

    for (int i = 0; i < 12; i++) { 
        [tempHours addObject:[NSNumber numberWithInt:(i+1)]];
    }

    self.hours = tempHours; // 'hours' is a synthesized NSArray property of the ViewController

    // [tempHours release];
}

さらに、NSNumberを配列に追加したので、文字列値に変換します。

stringIndex =[NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];