2012-02-10 17 views
6

UIWebViews'ı yeniden kullanmanın kötü bir uygulama olduğunu okudum. İşimde miras aldığım bazı kodlar, çeşitli içeriği bir UIWebView'e zorluyor. Powerpoints, Word belgeleri ve video. Bütün bunlar normal şartlarda gayet iyi çalışıyor. UIWebView'daki içeriği çok hızlı değiştirdiğimizde, o da döküm oluyor.UIWebView'ı yeniden kullanmak çöküyor

Web sayfam özellik olarak ayarlanmıştır. IB'de gayet iyi durumda. Bizim tablodan normal seçim, yerel içeriği sadece iyi yükler. Çarpışması için aynı hücrenin ya da çoklu kombinasyonlarının hızlı ateş seçimini alır.

WebViewDidFailWithError için bunun için bazı hata iletileri yakalayabilirim. Ama bunlar bir çarpışma olmadan bile tetikleyecektir. İşte hata yerelleştirilmiş dize.

The operation couldn’t be completed. (NSURLErrorDomain error -999.) 

uygulaması nihayet çökmesine yok

, bu aptal WebCore hata havaya uçuruyor.

Application Crash image

kimse bu nasıl başa bağlantıları veya bazı kod örnekleri varsa bunu takdir ediyorum. Belki de webView özelliğini bir şeyleri havaya uçurmadan en iyi şekilde nasıl kullanabileceğine dair bir örnek.

Bazı kodları yüklerdim, ancak webView ile ilgili olmayan bir çok şey var. WebView'e aktarılan tüm içerikler, yerel içeriğe giden yolla doldurulmuş bir NSURLRequest olmak üzere [self.webView loadRequest:request]; aracılığıyla yapılır.

Bu konuda bana yardımcı olabilecek herhangi biri varsa çok minnettar olacağım. Parmaklar basit bir şey için geçti.

+0

WebView yüklediğinizde kullanıcı etkileşimini engellemelisiniz. –

+0

Bu mümkün olabilir, ancak istemcimizin buna uygun olamayacağından emin değiliz. Bunu göz önünde bulunduracağım. Teşekkürler. –

+0

'@try {} @catch {} 'ile denediniz mi? –

cevap

2

Bu şekilde sorunu çözmek için "en iyi" yol olduğundan emin değilim, ancak oldukça iyi çalışıyor gibi görünüyor. Kısa, tatlı ve işe yarıyor.

KullanıcıInteraction'ı webView içerisindeki içeriği güncelleyen tableView ile devre dışı bıraktım. Çok fazla püre yapmak zorunda olduğunuzdan, burada bir musluk eksik veya muhtemelen kaçırılmayacak. Yani şimdilik, bu düzeltmedir. senin UIWebViewDelegate olarak

#pragma mark - 
#pragma mark UIWebViewDelegate methods 

-(void)webViewDidStartLoad:(UIWebView *)webView { 
    [self.tableView setUserInteractionEnabled:NO]; 
} 

-(void)webViewDidFinishLoad:(UIWebView *)webView { 
    [self.tableView setUserInteractionEnabled:YES]; 
} 

// I re-enable on load failures as they can block you out entirely on fail 
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { 
    [self.tableView setUserInteractionEnabled:YES]; 
} 
0

Başka bir istek yüklemeden önce [webview stopLoading]; kullanıyor musunuz? Yapmanız gereken şey, farklı bir yüklemeyi denemeden önce geçerli yüklemeyi iptal etmek veya durdurmaktır. Diğer seçenek kullanıcı girişini kısıtlıyor.

+0

[self.webView stopLoading] işlemini yapmayı denedim; Yeni loadRequest'i çağırmadan önce, ancak hiçbir fark yaratmıyor, hala çöküyor. –

+0

Bu alandaki sorun gibi görünüyor. Hızlıca dokunduğunuzda yalnızca çökerse, sorun birden çok istekle birlikte olmalıdır. Kullanıcı girişini kısıtlamak için, yüklenmeyi tamamlayana kadar olmak zorunda değildir. Sorunun giderilip giderilmediğini görmek için dokunuşları yarım ya da tam saniye göz ardı etmeyi deneyebilirsiniz. – Jaybit

+0

Evet, eminim düzeltecektir. Ama sorunu gerçekten çözmez. Oldukça hızlı bir şekilde dövebilirim ve tutar. Gerçekten sadece gerçekçi olmayan dokunma ile çöküyor. İş mümkün olsa bile, çökmeleri nasıl önleyeceğimi bulmamı ister. Anlayış için teşekkürler. –

1

Yalnızca hızlı bir şekilde dokunduğunuzda çöküyorsa, fakir bir insanın sınırlayıcı olarak davranması için üzerinde bir jest tanıyıcı yerleştirebilir misiniz?

+0

Tablo üstündeki tanıtıcıyı belirlemeView -didSelectRowAtIndexPath? –

+0

Taleplerin hangileri tarafından tetiklendiğine bağlı olarak, bunları çok sık göndermemeniz gerekir. –

0

, zaten bir istek yükleme varsa NO dönmek için webView:shouldStartLoadWithRequest:navigationType: uygulayabilir.

0

Yardım edemiyorum ama UIWebView'ı yeniden kullanmamanın daha iyi olacağını düşünmüyorum. Uçu atlayın, program aracılığıyla oluşturun ve veri kaynağını değiştirdiğinde sıfırlayın ve yeniden oluşturun/yeniden atayın/yeniden tahsis edin.

Farklı bir notta, veri yüklemesi için NSOperationQueue kullandığınızdan emin olabilirsiniz.

+0

Tavsiye için teşekkürler. Maalesef ellerim konuya bağlı. Bunu nasıl halledeceğimizi anladık. Hala yüklendiğini ve kullanıcının web sayfasını aşırı yüklemesini sağladığını gösteren bir ilerleme göstergesi olan bir UIView oluşturuyoruz. İşe yaradı, müşteri mutlu, umduğum kadarıyla. Tavsiye için teşekkürler. –

+0

İyi bir anlaşma gibi görünüyor. – ader

İlgili konular