UiWebView вылетает iPhone - PullRequest
0 голосов
/ 02 марта 2010

На следующем экране вылетает 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)) {
            }
        }
    }
}

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

ш: //

Ответы [ 4 ]

2 голосов
/ 02 марта 2010

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

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

1 голос
/ 06 марта 2010

Когда вы используете конструкцию «using», вы вызываете Dispose () в веб-представлении, которое отображается на сообщение «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 () не требуется, но оно должно помочь освободить память раньше, чем просто полагаться на сборщик мусора.

0 голосов
/ 02 марта 2010

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

0 голосов
/ 02 марта 2010

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

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

ш: //

...