внедрение UINibExternalObjects в самоинициализированный ViewController - PullRequest
2 голосов
/ 07 июля 2011

Я хочу перейти от одного ViewController к другому. В рамках этого я хочу передать ViewController Я хочу перейти к некоторой информации. Я заключил в капсулу информация в объект, который я хочу подключить как внешний объект с целью ViewController.

Я создал внешний Объект внутри IB, дал ему идентификатор, на который я ссылался в NSDictionary, который передается методу NibLoading.

NSArray*    topLevelObjs = nil;
NSMutableDictionary* options = [[NSMutableDictionary alloc] initWithCapacity:1];
NSMutableDictionary* config = [[NSMutableDictionary alloc] initWithCapacity:1];

id detailImageVC = [[SelectedImageModalViewController alloc] init];
SelectedImageModalModel* selectImageModalModel = [[SelectedImageModalModel alloc] init];
selectImageModalModel.imageName = @"img@2x.png";

[config setValue:selectImageModalModel forKey:@"SelectImageModalModel"];
[options setValue:config forKey:UINibExternalObjects];

topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"SelectedImageModalViewController" owner:detailImageVC options:options];
if ([topLevelObjs count] == 0)
{
    NSLog(@"Warning! Could not substitute proxy objects in xib file.\n");
    return;
}

[appDelegate.navigationController presentModalViewController:detailImageVC animated:YES];

[options release];
[config release];
[selectImageModalModel release];
[detailImageVC release];

Я ожидал, что после того, как я вызову presentModalViewController: animated: я получу вызов viewDidLoad для того же элемента detailImageVC со своими внешними объектами связано.

Вместо этого ничего не происходит. viewWillApear: будет вызван, но detailImageVC не будет содержать мою внешнюю ссылку.

Любая идея, подсказка или комментарий приветствуются. Спасибо!

1 Ответ

1 голос
/ 04 апреля 2013

viewDidLoad будет вызвано, если только ViewController загрузил само представление.

Например;initWithNibName не загружает представление, оно просто устанавливает имя пера.Когда ViewController понадобится его представление в какой-то момент в будущем и если в ViewController.view нет представления, то ViewController загрузит представление так же, как вы это сделали, И ПОТОМ ПРИЗНАЕТ viewDidLoad.

Ваш код загружает представление самого ViewController.Поэтому вы должны вызывать метод viewDidLoad в своем коде следующим образом:

topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"SelectedImageModalViewController" owner:detailImageVC options:options];
if (topLevelObjs.count == 0) {
    NSLog(@"Warning! Could not substitute proxy objects in xib file.\n");
    return;
} else {
    [detailImageVC viewDidLoad];
}

Если ваш detailImageVC не содержит ваш внешний объект, то вы должны проверить файл пера для IBOutlet привязок и ваших SelectedImageModalViewController для соответствующего @property.Если свойство не является таким сильным, как @property(nonatomic, strong) в ARC, или не находится в не-ARC, как @property(nonatomic, retain), то оно не будет удерживать ваш объект после пробуждения из пера.

...