さて、私は次の一般的な問題を抱えています
[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];
ありがとう!
return [NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];
self.hours
に保持されているNSNumber
が返されます。 NSString
は期待される戻り値なので、次の方法で文字列を作成する必要があります。
[NSString stringWithFormat:@"%@", [self.hours objectAtIndex:row]];
またはあなたの意図を再評価します。実際にこの方法でインデックスを保存しますか、それともNSStrings
を保存しますか?
誰かがこの問題を抱えており、具体的には行のインデックスを返している場合は、次のようにして常にNSNumberをstringValueに変換できます。
NSString *code = [[[JSONResponse objectForKey:@"meta"] objectForKey:@"code"] stringValue];
メソッドの最後にstringValue
を配置すると、すべてが文字列に変換されます。intValue
を使用することもできます。
コメント[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]];