0

私は、カスタム UITableViewController シーンから Picker View を含み、@required pickerview デリゲート/データソース メソッドを実装するカスタム UIViewController シーンへのプッシュ セグエイングに問題を抱えている初心者の ios プログラマーです。

[より多くの洞察を提供するためにここにスクリーンショットを用意しましたが、画像を投稿する担当者がいません。3 つの静的な行を持つテーブルビュー コントローラーを想像してください。それぞれが、それぞれのピッカー ビューにプッシュするための詳細開示を提供します - [画像]

テーブルの開示インジケーターのいずれかをタップすると、実行時に問題が発生します。返されるエラーは

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PickerViewController superview]: unrecognized selector sent to instance."

前述のように、LocationFilter は UITableViewController のサブクラスであり、ラベルとステッパーのいくつかのプロパティで構成されています。

ピッカー ビュー コントローラーのコードは次のとおりです。

#import <UIKit/UIKit.h>

@interface PickerViewController : UIViewController <UIPickerViewDataSource,UIPickerViewDelegate>
{
    NSArray *sectionCandidates;
    NSArray *bankCandidates;
    NSArray *positionCandidates;
}

@property (weak, nonatomic) IBOutlet UIPickerView *sectionPicker;
@property (weak, nonatomic) IBOutlet UIPickerView *bankPicker;
@property (weak, nonatomic) IBOutlet UIPickerView *positionPicker;
@property NSArray *sectionCandidates, *bankCandidates, *positionCandidates;

@end

と .m:

#import "PickerViewController.h"
#import "SlotMachine.h"

@implementation PickerViewController

@synthesize sectionCandidates, sectionPicker, bankCandidates, bankPicker, positionCandidates, positionPicker;

- (void)viewDidLoad
{
    [super viewDidLoad];
    sectionCandidates = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", nil];
    bankCandidates = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", nil];
    positionCandidates = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", nil];
}

// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    //Handle Selection
}

// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    switch ([pickerView tag])
    {
        case 0:
            return [sectionCandidates count];
        case 1:
            return [bankCandidates count];
        case 2:
            return [positionCandidates count];
        default:
            return 0;
    }
}

// returns the label for each row
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    switch ([pickerView tag])
    {
        case 0:
            return [sectionCandidates objectAtIndex:row];
        case 1:
            return [bankCandidates objectAtIndex:row];
        case 2:
            return [positionCandidates objectAtIndex:row];
        default:
            return @"Null";
    }
}

@end

残念ながら、ピッカー ビューはトラブルシューティングに関してあまり詳細な注意を払っていないようです。そのため、この問題の解決に役立つ SO や一部の iOS 書籍を見つけることができませんでした。「認識されないセレクターがインスタンスに送信されました」の考えられる原因についての一般的な考えはありますが、その修正がここでどのように適用されるかはわかりません。これが私の最初の投稿であるため、適切にフォーマットされていなかったり、十分な/関連情報を提供していなかったりした場合は、お詫び申し上げます。

4

1 に答える 1

1

ストーリーボードから、各ビュー ピッカー ビュー コントローラーに 1 つのピッカー ビューが表示されますが、コードでピッカー ビューの 3 つの IBOutlet を宣言します。IB のこれら 3 つのビュー コントローラーを 3 つのピッカー ビューを持つ 1 つに統合するか、IBOutlet UIPickerView プロパティを 1 つだけ持つ 3 つの個別のビュー コントローラー サブクラスを作成する必要があります。

これらのピッカー ビューをプロパティとして設定したので、これらのタグは必要ありません。ピッカービュー自体のチェックでタグのチェックを変更できます。

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (pickerView == self.sectionPicker) {
        return [sectionCandidates count];
    }
    else if (pickerView == self.bankPicker) {
        return [bankCandidates count];
    }
    else if (pickerView == self.positionPicker) {
        return [positionCandidates count];
    }
    return 0;
}

ピッカー ビューのデータ ソースにも同様の変更を加える必要がありtitleForRow:forComponentます。

于 2013-05-24T15:57:20.513 に答える