我在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);
任何想法为什么它会随机地在实际设备上崩溃,但从未在模拟器中崩溃?
答案 0 :(得分:4)
我需要查看崩溃详细信息以及更多源代码100%确定,但我相信它是由于您的NSUrlRequest
实例被声明为局部变量而导致的。 将此变量提升到您的类型字段中应解决此问题。
一旦方法完成执行,仍然可能需要该实例。但是当时它不再被引用,垃圾收集器可以随时收集它。如果被收集,那么你可能会像你提到的那样崩溃。
它在模拟器上没有发生的事实可能是因为它比设备更快(并且代码可以在GC收集该实例之前完成)。它可能会崩溃它只是一个时间的东西,它使它在模拟器上大部分时间工作,几乎从不在设备上。