Ваши элементы представления создаются только при необходимости.Это означает, что первая ссылка на свойство view
контроллера (внутренне из UIKit или ссылка в любом месте вашего кода на «self.view») запускает процесс фактического создания всех элементов, которые вы имеете в своем кончике.
Таким образом, пока вышеописанный процесс не будет выполнен, ваше свойство webView
будет равно нулю.Скорее всего, вы звоните loadRequest
до того, как ваш взгляд был создан.Решением вашей проблемы было бы просто измениться, когда вызывается loadRequest
.
Так что будет подходящим временем для вызова loadRequest?Есть три возможности:
1) Если вы вызываете loadRequest из CustomWebView, вы можете поместить этот код в viewDidLoad
2) Если вам нужно вызвать loadRequest извне CustomWebView,вы можете подождать, когда вы впервые представите этот контроллер (скажем, с помощью presentModalViewController:animated:
или поместив свой контроллер в стек навигации), а затем вызовите loadRequest.
Таким образом, ваш код может выглядеть примерно так:
NSURLRequest *someRequest = nil; //Assume this has some valid value
CustomWebView *myWebView = [[CustomWebView alloc] init]; //Plus other nib niceties
[self presentModalViewController:myWebView];
[myWebView loadRequest:someRequest]; //View has been created,
//loadRequest will work.
вместо того, что изначально могло быть:
NSURLRequest *someRequest = nil; //Assume this has some valid value
CustomWebView *myWebView = [[CustomWebView alloc] init]; //Plus other nib niceties
[myWebView loadRequest:someRequest]; //Your view is not created yet, loadRequest won't work.
[self presentModalViewController:myWebView];
3) Если вы не можете выполнить вышеизложенное, и ДОЛЖНЫ иметь возможность вызывать loadRequest в любой момент времени, независимо от того, когда вы выберетена presentModalViewController
или pushViewController
, всегда есть хак для сохранения дня:)
Хак, просто обратитесь к self.view
в методе init вашего CustomWebView, и вы можете быть уверены, чтовид был настроен сразу после 'init'.Неважно, как вы ссылаетесь на self.view
, подойдет даже что-то вроде [self.view setNeedsLayout]
.Как я уже сказал, это не имеет значения.
Это довольно простая проблема, но я подумал о том, чтобы изложить здесь все варианты, так как это довольно распространенная ошибка, которую я делал.