У меня проблема со следующим кодом. Как вы можете создать TripDetailsController (подкласс UIViewController), и этот инициализируется с помощью метода initWithNibName. Этот initWithNibName принимает дополнительный аргумент (tripDetails), см. Код класса TripDetailsController ниже. Переменная td имеет значение, и при пошаговом выполнении кода я проверял, что это значение было установлено в tdController при выполнении метода initWithNibName. Однако при установке точки останова в методе TripDetailsController.viewDidLoad (который выполняется при вызове pushViewController ()) атрибут tripDetails в TripDetailsController равен нулю?
Используя отладчик, я обнаружил, что экземпляр tdController, который я вижу в методе initWithNibName, отличается от экземпляра, который я вижу в методе viewDidLoad? Как так? Почему и кем создан новый экземпляр TripDetailsController?
В конце этого поста я включил дамп стека вызовов, возможно, который даст вам подсказку о причине этой проблемы.
Код:
// Code from RootViewController.getTripDetails() (see stacktrace below)
TripDetails td = ...; // td has a value
// Push the detail view controller
TripDetailsController *tdController = [[TripDetailsController alloc] initWithNibName:@"TripDetailsController" bundle:nil tripDetails:td];
// Checked using the debugger that tdController.tripDetails is set
[self.navigationController pushViewController:tdController animated:YES];
[tdController release];
Код:
@implementation TripDetailsController
@synthesize tripDetails, expectedDurationLabel, normalDurationLabel;
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = @"Reis Details";
expectedDurationLabel.text = [NSString stringWithFormat:@"%@", tripDetails.expectedDuration];
}
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle tripDetails:(TripDetails *)td {
self = [self initWithNibName:nibName bundle:nibBundle];
self.tripDetails = td; // self.tripDetails has a value here!
[self.tripDetails retain];
return self;
}
- (void)dealloc {
[self.tripDetails release];
[super dealloc];
}
@end
альтернативный текст http://gerodt.homeip.net/stack.png
Любые предложения приветствуются.
Геро