0

以下视图使 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)) {
            }
        }
    }
}

有没有人见过这个?

w://

4

4 回答 4

2

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

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

于 2010-03-01T23:03:10.287 回答
1

当您使用“使用”构造时,您在 web 视图上调用 Dispose(),它映射到 Cocoa 运行时中的“发布”消息。

因此,您正在释放 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(),但它应该有助于比简单地依赖垃圾收集器更早地释放内存。

于 2010-03-06T13:08:02.680 回答
0

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

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

w://

于 2010-03-02T06:15:31.270 回答
0

将它包装在 using 语句中对我来说似乎很奇怪。就好像你在加载的时候处理了一些东西。你确定这是对的吗?

于 2010-03-02T06:15:37.140 回答