3

UIPickerViewデータソースを設定しようとしている があります。が設定されたらdatasource、モーダル ポップオーバーに配置して表示します。コードは次のとおりです - manicuristArray は として定義されNSArray、pvManicurist は であり、 SO で見つけたサンプルに従ってUIPickerView、すべてのデリゲートがUIPickerView正しく設定されています):

    -(void) showModalManicurist:(int)tag {

    UIViewController* popoverContent = [[UIViewController alloc] init];

    UIView *popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 216)];
    popoverView.backgroundColor = [UIColor redColor];
    popoverContent.contentSizeForViewInPopover = CGSizeMake(300.0, 216.0);

    //  define the UIPickerView
    pvManicurist.frame = CGRectMake(0, 0, 300, 216);

    //  fill the names from the d/b into manicuristArray
    PreferenceData *pv = [PreferenceData MR_findFirst];  //  (everything is in one record)
    NSLog(@"pv.aStaffPos1: %@", pv.aStaffPos1);

    if(pv)  {   //  fill the UIPickerView
        self.manicuristArray = [[NSArray alloc] initWithObjects: pv.aStaffPos1, pv.aStaffPos2, pv.aStaffPos3, pv.aStaffPos4, pv.aStaffPos5,
                           pv.aStaffPos6, nil];
        NSLog(@"\nmanicuristArray.count: %d",manicuristArray.count);

        pvManicurist.dataSource = self.manicuristArray;        [pvManicurist reloadAllComponents];

     }

    //  add it to the popover
    [popoverView addSubview:pvManicurist];
    popoverContent.view = popoverView;
    popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
    popoverController.delegate = (id)self;
    [popoverController setPopoverContentSize:CGSizeMake(300, 216) animated:NO];

    //  show it below the staff name textbox
    [popoverController presentPopoverFromRect:boStaff.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp
                                     animated:YES];
}

問題は、このビルド警告が表示されることです:

ビルド エラー: 互換性のない型 'NSArray *' から 'id' に割り当てています

UIPickerビューが に入れられない原因になっていると私は信じていUIPopoverます。他にもいくつかのポップオーバーがあり、すべてが含まUIDatePickersれていますが、正常に動作します。私は SO と Google を調べましたが、この特定の質問に答えるものは何も見つかりませんでした。つまり、なぜこれが機能しないのですか? ビルドエラーを修正するにはどうすればよいですか?

更新: UIPickerView のデリゲート メソッドは次のとおりです。

//--  sets number of columns
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pvManicurist  {

    return 1; // One column
}

//--  sets count of manicuristArray
-(NSInteger)pickerView:(UIPickerView *)pvManicurist numberOfRowsInComponent:(NSInteger)component  {

    return manicuristArray.count;  //set number of rows
}

//--  sets the component with the values of the manicuristArray
-(NSString *)pickerView:(UIPickerView *)pvManicurist titleForRow:(NSInteger)row forComponent:(NSInteger)component  {

    return [manicuristArray objectAtIndex:row];  //set item per row
}

.h ファイルのインターフェイスは次のとおりです。

@interface AppointmentsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UINavigationControllerDelegate, UIActionSheetDelegate, UITextFieldDelegate,UIPickerViewDelegate, UIPickerViewDataSource  >  {
4

3 に答える 3

0

NSArray*をピッカー ビューのデータソースとして設定しようとしているため、そのエラー メッセージが表示されます。ピッカー ビューのデータソースは、UIPickerViewDataSourceプロトコルに準拠するクラスのインスタンスである必要があります。

このプロトコルの詳細については、iOS ドキュメントのUIPickerViewDataSource プロトコル リファレンスを参照してください。

于 2013-04-06T21:24:09.577 に答える