Monotouch + UIWebView = Случайные сбои - PullRequest
4 голосов
/ 27 декабря 2011

Я использую последние стабильные выпуски Mono / Monotouch / MonoDevelop на iOS 5.0 и iPhone и iPad.У меня есть 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);

Есть идеи, почему это может произойти сбой на реальном устройстве случайно, но никогда в эмуляторе?

1 Ответ

4 голосов
/ 28 декабря 2011

Мне нужно было бы увидеть детали сбоя и еще больше исходного кода, чтобы быть на 100% уверенным, но я верю , что это вызвано тем, что ваш экземпляр NSUrlRequest объявлен как локальная переменная. Повышение этой переменной в поле вашего типа должно решить эту проблему.

Экземпляр все еще может потребоваться после завершения метода. Однако в то время на него больше нет ссылок, и сборщик мусора может собрать его в любое время. Если вы соберете их, то, скорее всего, вы получите аварию, о которой упоминали.

Тот факт, что это не происходит в симуляторе, вероятно, вызван тем, что он быстрее (чем устройство), и код может завершиться до того, как GC соберет этот экземпляр. IOW это может привести к сбою, это просто время, которое заставляет его работать большую часть времени на симуляторе и почти никогда на устройствах.

...