presentModalViewController не выполняется? - PullRequest
0 голосов
/ 09 августа 2009

Я опытный разработчик программного обеспечения (в основном C и C ++ для встраиваемых систем, Linux и Qt для пользовательских интерфейсов). Недавно я перешел к разработке для iPhone и столкнулся с запутанной проблемой с UIViewController и presentModalViewController. Я пытаюсь представить модальное диалоговое окно ABPeoplePickerNavigationController, но оно не отображается.

Моим основным приложением управляет объект под названием Controller, подкласс NSObject. Недавно я добавил подкласс UIViewController под названием AddressBookController (и Controller, и AddressBookController объявлены в моем NIB).

У меня есть эта функция в Controller, который использует IBOutlet для вызова функции в AddressBookController (просто примечание, я знаю, что передача 'sender', вероятно, неверна - какой правильный способ вызова функции это ищу (id) отправителя в качестве параметра?):

- (IBAction)addressPressed:(id)sender
{
    [addressViewController showContactPicker:sender];
}

Вот мое объявление интерфейса для AddressBookViewController:

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

@interface AddressBookViewController : UIViewController <ABPeoplePickerNavigationControllerDelegate>
{
}

@end

Функция showContactPicker в AddressBookController выглядит следующим образом:

#import "AddressBookViewController.h"

@implementation AddressBookViewController

- (void) showContactPicker:(id)sender
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;
    [self presentModalViewController:picker animated:YES];
    [picker release];
}

...

Я с помощью отладчика подтвердил, что вызывается [self presentModalViewController: picker animated: YES], но на экране ничего не появляется, и выполнение кода просто переходит к [выпуску выбора]. Кто-нибудь знает, почему этот звонок ничего не делает? Я не вижу никаких сообщений об ошибках, предупреждений и т. Д. При выполнении этого кода.

Заранее спасибо!

1 Ответ

1 голос
/ 09 августа 2009

Вы не указываете, какой nib / xib использовать в вашей инициализации:

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];

Измените его на:

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] initWithNibName@"ABPeoplePickerNavigationController" bundle:nil];

убедившись, что вы используете то, что называется вашим nib-файлом, за исключением расширения .xib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...