2010-03-01 3 views
0

следующее представление роняет iPhoneUIWebView врезается iPhone

Если я закомментируйте раздел

using (webView = new UIWebView(webRect)) { 
} 

- это не так.

using System; 
using MonoTouch.UIKit; 
using MonoTouch.Foundation; 
using System.Drawing; 

namespace WmcStarClient 
{ 


    public class EventDetailView : UIViewController 
    { 
     public WmcStarEventService.Event _event; 
     public UIWebView webView; 

     public EventDetailView() 
     { 
     } 

     public EventDetailView (WmcStarEventService.Event eventParam) 
     { 
      _event = eventParam; 
     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 

      var webRect = new RectangleF(0f, 0f, 320f, 460f); 

      using (webView = new UIWebView(webRect)) { 
      } 
     } 
    } 
} 

Кто-нибудь видел это раньше?

ш: //

ответ

2

Это была ошибка, которая была зафиксирована в первой бета-версии серии 1.5:

http://monotouch.net/Releases/MonoTouch_1.4.99

+0

hmph ... я просто обновился до этого. он фактически не разбивается сразу - это просто, если я загружаю этот экран, а затем перезапускаю приложение - он не проходит мимо заставки. но если я прокомментирую код uiwebview, это нормально :( – iwayneo

0

Это potentialy другая/новая ошибка - я получил лучший ответ над на MonoTouch форумах:

http://forums.monotouch.net/yaf_postsm1500.aspx#post1500

ш: //

+0

это на самом деле ошибка в catnap orm - с использованием старой версии sqlite3.cs - я собираюсь связаться с создателем и получить это исправление :) – iwayneo

0

Мне кажется очень странным, чтобы обернуть это в используемом утверждении. Это как будто вы что-то убираете, пока еще загружаете. Вы уверены, что это правильно?

+0

рекомендуется на сайте примеров :) – iwayneo

+0

Я просто посмотрел пример в монокатегории, и я не вижу, чтобы он был обернут в оператор using. Что делает вызов Dispose() в UIWebView? –

+0

http://monotouchexamples.com/#3 , чтобы быть справедливым - когда я думал, что это был вопрос uiwebview, который вызывал проблему, я думал, что это как-то связано с этим, а не правильно распоряжаться - такого рода поддержка - это возможно, это не нужно. :) – iwayneo

1

Когда вы используете конструкцию «using», вы вызываете Dispose() в webview, который отображается в сообщении «release» в среде выполнения Cocoa.

Итак, вы освобождаете объект webview, но вы все еще держитесь за ссылку в своем классе. В первый раз, когда вы пытаетесь получить к нему доступ, вы получаете доступ к выпущенному экземпляру.

Вы не добавляете веб-представление к своему представлению в качестве подзаголовка? Если да, то в какой момент?

правильный код, ИМХО, был бы:

public class EventDetailView : UIViewController 
    { 
     public WmcStarEventService.Event _event; 
     public UIWebView webView; 

     public EventDetailView() 
     { 
     } 

     public EventDetailView (WmcStarEventService.Event eventParam) 
     { 
      _event = eventParam; 
     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 

      var webRect = new RectangleF(0f, 0f, 320f, 460f); 

      webView = new UIWebView(webRect); 

      View.AddSubView(webView); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      if (disposing) 
       webView.Dispose(); 

      base.Dispose(disposing); 
     } 
    } 

Обратите внимание, что переопределение Dispose() не требуется, но это должно помочь освободить память раньше, чем просто полагаться на сборщик мусора.