3

私はこれを上下に検索し、似ているが私の正確な問題ではないいくつかを見つけました。詳細ビュー コントローラーには、ポップオーバー テーブル ビュー コントローラーを開くセグエがあります。PrepareForSegue メソッドでは、テーブル ビューのプロパティを次のように設定します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"StateSegue"])
    {
        popover = [(UIStoryboardPopoverSegue *)segue popoverController];
        StatePickerController *statePicker = (StatePickerController *)popover.contentViewController;
        statePicker.delegate = self;
        statePicker.pickerType = @"states";
    }
}

デリゲートと pickerType 値の両方を渡します。テーブル ビューの StatePickerController のヘッダーで、これらのプロパティを次のように宣言しました。

@property (nonatomic,assign) id<StatePickerDelegate> delegate;
@property (nonatomic,strong) NSString *pickerType;

後で didSelectRowAtIndexPath で両方を参照でき、正しいデリゲートと「状態」を取得できるため、これらの値がポップオーバー コントローラーに正しく渡されることはわかっていますが、viewDidLoad メソッドでは両方とも (null) のままです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.clearsSelectionOnViewWillAppear = NO;
    self.contentSizeForViewInPopover = CGSizeMake(150.0, 140.0);
    self.states = [NSMutableArray array];
    NSLog(@"%@",self.delegate); //returns (null)
    NSLog(@"%@",self.pickerType); //returns (null)
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%@",self.pickerType); //corectly logs "state"
    NSString *state = [_states objectAtIndex:indexPath.row];
    [self.delegate stateSelected:state]; //correctly runs method on detailviewcontroller
}

viewDidLoad メソッドの後に、これらのプロパティが設定されるポイントはありますか? ビューがロードされたときにこれらの値にアクセスする必要があります。これは、detailviewcontroller から渡されたデータに基づいて、テーブルにどのデータを入力するかを決定する必要があるためです。

4

1 に答える 1

-1

viewWillAppear は、viewDidLoad の後に呼び出されます。代わりにそれを使用して、prepareForSegue メソッドの後に値を確認してください。

于 2012-12-12T19:31:00.083 に答える