2

以下のように、すでにプッシュされているViewControllerにViewControllerをプッシュしようとしています。しかし、どういうわけか、をプッシュしようとするとnewPersonViewController、この新しいコントローラーはスタックにプッシュされません。階層に属していない新しいコントローラーを追加しようとしているとXcodeが文句を言っている理由がわかりません。ABPeoplePickerViewController間違って提示しましたか?newPersonViewControllerこれが、がスタックにプッシュされなかった理由ですか?

コンソールからのメッセージ:

警告:ビューがウィンドウ階層にないものを提示しようとしています!

コード:

- (void)addPerson
{
    ABNewPersonViewController *newPersonVC = [[ABNewPersonViewController alloc] init];
    newPersonVC.newPersonViewDelegate = self;
    UINavigationController *uiNav = [[UINavigationController alloc] initWithRootViewController:newPersonVC];

    [self presentViewController:uiNav animated:YES completion:nil];
}

- (void)showPeoplePicker
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;

    [self presentViewController:picker animated:YES completion:nil];
    [picker.topViewController setEditing:YES];
    picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)];
    picker.topViewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(peoplePickerCancel)];
}
4

1 に答える 1

1

問題はaddPerson、現在のコントローラーではないビューコントローラーからモーダルに表示しようとしていることです。(self元のView Controller)はアクティブなコントローラではありません。ABPeoplePickerNavigationControllerです。

pickerしたがって、最初に、クラスプロパティを定義して:を追跡します。

@property (nonatomic, weak) ABPeoplePickerNavigationController *picker;

その後、

  • showPeoplePickerそのプロパティを設定するように変更します。と
  • addPersonそのプロパティを使用するように変更します。

したがって:

- (void)addPerson
{
    ABNewPersonViewController *newPersonVC = [[ABNewPersonViewController alloc] init];
    newPersonVC.newPersonViewDelegate = self;
    UINavigationController *uiNav = [[UINavigationController alloc] initWithRootViewController:newPersonVC];

    [self.picker presentViewController:uiNav animated:YES completion:nil];
}

- (void)showPeoplePicker
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;

    [self presentViewController:picker animated:YES completion:nil];
    [picker.topViewController setEditing:YES];
    picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd    target:self action:@selector(addPerson)];
    picker.topViewController.navigationItem.leftBarButtonItem  = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(peoplePickerCancel)];

    self.picker = picker;
}

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(ABRecordRef)person
{
    [newPersonView dismissViewControllerAnimated:YES completion:nil];
}
于 2013-01-10T17:07:52.157 に答える