【问题标题】:Monotouch + UIWebView = Random CrashesMonotouch + UIWebView = 随机崩溃
【发布时间】:2011-12-27 16:39:04
【问题描述】:

我在 iOS 5.0 iPhone 和 iPad 上使用 Mono/Monotouch/MonoDevelop 的最新稳定版本。我有一个 UIWebView,它在模拟器中从不崩溃,但在实际设备上随机崩溃,它在 EXC_BAD_ACCESS 上崩溃。根据我使用 UIWebViews 阅读的所有内容,最有可能发生在 UIWebView 在完成加载之前被处置时。

这是我在 ViewDidLoad() 中使用的代码:

var urlAddress = BASE_URL + _page;
var nsURL = new NSUrl(urlAddress);
var nsURLRequest = new NSUrlRequest(nsURL);

_webView.Tag = 10;
_webView.ScalesPageToFit = true;
_webView.AutosizesSubviews = true;

_webView.LoadStarted += HandleWebViewLoadStarted;
_webView.LoadFinished += HandleWebViewLoadFinished;
_webView.LoadRequest(nsURLRequest);

this.Add(_webView);

任何想法为什么它会在实际设备上随机崩溃,但从不在模拟器中?

【问题讨论】:

    标签: ios uiwebview crash xamarin.ios nsurlrequest


    【解决方案1】:

    我需要查看崩溃详细信息和更多源代码才能 100% 确定,但我确实相信这是因为您的 NSUrlRequest 实例被声明为局部变量。 将此变量提升为您类型的字段应该可以解决此问题。

    一旦方法完成它的执行,仍可能需要该实例。但是当时它不再被引用,垃圾收集器可以随时收集它。如果收集,那么您可能会遇到您提到的崩溃。

    它没有在模拟器上发生的事实可能是因为它更快(比设备)并且代码可以在 GC 收集该实例之前完成。 IOW 它可能会崩溃,这只是一个时间问题,使它大部分时间都在模拟器上工作,而几乎从不在设备上工作。

    【讨论】:

    • 感谢这是导致崩溃的原因,因为我没有可以测试的物理设备,所以在测试时肯定很头疼。
    • 很高兴它有帮助。您能否将问题标记为已回答(选票下方的绿色标记),以便其他寻找相同问题的人可以看到可用的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2013-08-23
    • 2013-04-21
    • 2011-08-13
    相关资源
    最近更新 更多