私はこれを上下に検索し、似ているが私の正確な問題ではないいくつかを見つけました。詳細ビュー コントローラーには、ポップオーバー テーブル ビュー コントローラーを開くセグエがあります。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 から渡されたデータに基づいて、テーブルにどのデータを入力するかを決定する必要があるためです。