UiWebView崩溃了iPhone

时间:2010-03-01 22:49:48

标签: uiwebview xamarin.ios monodevelop

以下视图导致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 个答案:

答案 0 :(得分:2)

这是在1.5系列的第一个测试版中修复的错误:

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

答案 1 :(得分:1)

当你使用“using”结构时,你在webview上调用Dispose(),它被映射到Cocoa运行时中的“release”消息。

所以你发布了webview对象,但你仍然坚持你班级的参考。第一次尝试访问它时,您正在访问已发布的实例。

您是不是将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(),但它应该比简单地依赖垃圾收集器更早地释放内存。

答案 2 :(得分:0)

这可能是一个不同/新的错误 - 我在monotouch论坛上得到了更好的回应:

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

瓦特://

答案 3 :(得分:0)

将它包装在using语句中似乎很奇怪。这就像你在装载时处理某些东西一样。你确定没错吗?