2011-08-20 31 views
9

Aşağıdakileri bir denetleyicide (webView, UIWebView türünde bir örnek değişkeni var):LoadView uygulamasında self.view.frame dosyasına erişme EXC_BAD_ACCESS çökmesine neden oluyor

- (void)loadView 
{ 
    webView = [[UIWebView alloc]initWithFrame:self.view.frame]; 
    [self.view addSubview:webView]; 
} 

Web görünümünü ayıran ilk satır çarpışmaya neden oluyor - EXC_BAD_ACCESS ve bir mesaj alıyorum. konsol:

Uyarı: Daha önce seçilen çerçeve geri yüklenemedi

Kazaya neden sebep olduğunu anlamıyorum; self.view.frame kesinlikle bir CGRect'dir.

+2

Her zaman kilitlenme günlüğünü sağlarsınız. Bunu söylemek zor. – Anton

+0

Konsol, "uyarı: Daha önce seçilen çerçeve geri yüklenemiyor" diyor. ve UIWebView'u ayıran kod satırı yeşil renkle vurgulanır ve "EXC_BAD_ACCESS" yazıyor. – Tom

cevap

6

loadView yöntemini kullandığınızdan, kendi görünüm hiyerarşinizi manuel olarak oluşturmanız gerekir.

webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
self.view = webView; 
[webView release]; 

Yoksa loadView kullanarak atlamak ve sadece bu gibi viewDidLoad yönteminde yerleştirin olabilir: UIWebView UIView alt sınıfı olduğu için sadece bu gibi loadView yöntem yazabilirsiniz ayrıca To

webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
[self.view addSubview:webView]; 
[webView release]; 

UIViewController uygulaması başlatıldığında, uygulamanızın neden çöktüğünü ayrıntılı olarak açıklayın. Buna tembel yükleme denir, bu yüzden henüz mevcut olmayan bir değere erişmeye çalışıyorsunuz.

+0

webView – progrmr

+0

için @progrmr adlı sürümü yayınlamayı unutmayın. – ms83

+0

Teşekkürler Bu, işleri çok daha net hale getirir. – Tom

6

LoadView içindeki self.view erişimini kullanamazsınız, sadece ayarlayıcıyı kullanabilirsiniz. Bunun nedeni, bir UIViewController'daki view erişimci yönteminin görünümü yüklemesidir (zaten yüklü değilse) ve zaten loadView üzerindeyseniz (görünümü yükleyerek) sonsuz bir özyinelemesine neden olur. Bunu yerine böyle yapmak isteyeyim from this answer loadView için biçim kullanılıyorsa

:

webView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
self.view = webView; 
[webView release]; // don't forget to release 
0

Ben loadView çağrıldığında self.view.frame yok düşünüyorum. Bu kodu viewDidLoad'a koyabilirsiniz, burada self.view yüklüdür ve çerçeve bilinir.

1

Görünümü bile oluşturmadan görünümün çerçevesine erişmeye çalışıyorsunuz. Bir görünüm oluşturabilir ve self.view olarak atayabilir veya sadece [super loadView]'u arayabilirsiniz. Aşağıdaki kodu deneyin.

- (void)loadView { 

    [super loadView]; 
    webView = [[UIWebView alloc] initWithFrame:self.view.frame]; 
    [self.view addSubview:webView]; 
} 
+0

Docs önerileri süper –

+0

@Brad Thomas, Really? Ben öyle düşünmüyorum. – EmptyStack

+0

https://developer.apple.com/library/ios/Documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#jumpTo_61 –

İlgili konular