0

私は Objective C と Xcode の初心者で、一度に 1 つずつ学習しようとしています。特定の問題について何日も頭を悩ませていて、解決策を見つけるのに非常に苦労しています。辞書を使用してピッカーにデータを入力する UIPickerView アプリを作成しています。arrayStates は左側のコンポーネントに入る州であり、arrayCities は State のキーであるその州にある都市です。都市は右側のコンポーネントに入ります。問題はコードのブロックに絞り込まれたと思います.ピッカーに値を入力しようとすると、クラッシュします。このコード ブロックをコメント アウトすると、正常に実行されます (ピッカー内のテキストとして疑問符がある場合のみ)。次のエラーが表示されます。

NSInvalidArgumentException', reason: '-[__NSCFString superview]: unrecognized selector sent to instance

エラーの原因となっている .m ファイルのコード ブロックは次のとおりです。

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:    (NSInteger)component reusingView:(UIView *)view {

if (component == 0) {
   return [arrayStates objectAtIndex:row];
}
else {
UILabel *lblCity=[[UILabel alloc] initWithFrame:CGRectMake(5,0,220,50)];
lblCity.text= [arrayCities objectAtIndex:row];
lblCity.backgroundColor = [UIColor clearColor];
lblCity.font = [UIFont boldSystemFontOfSize:18];
return lblCity;
}

}

以下は私がコードを変更したもので、うまく動作しています! 迅速かつ的確なご回答ありがとうございます!!

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

{

if (component == 0)
{
   return [arrayStates objectAtIndex:row];
}
else
{
  return [arrayCities objectAtIndex:row];
}

}
4

2 に答える 2

1

コンポーネントが 0 の場合に文字列を返しているため、このエラーが発生しています。おそらく、viewForRow の代わりに pickerView:titleForRow:forComponent: を使用し、ラベルを作成するのではなく、配列から文字列を返すだけにすることをお勧めします。都市。

于 2013-03-08T21:00:28.027 に答える
0

このエラーが意味することは、NSStringベース クラスを渡す必要がある場所にベース クラスを渡しているということですUIView

実際に起こっていることを示唆するものはここには何も表示されないので、これを期待していreturn [arrayStates objectAtIndex:row]ます。UIView を返す必要があるためarrayStates、クラッシュのベースである UIView 以外に何も含まれていない限り。どこでどのように修正するかは、もう少し複雑になる可能性があります。

于 2013-03-08T21:00:16.437 に答える