2012-08-12 29 views
9

Tôi đang cố gắng bao gồm trình duyệt dựa trên UIWebView trong ứng dụng iPad của mình. Phải mất một thời gian, điều này khiến cho việc gỡ lỗi trở nên khó khăn, nhưng ứng dụng cuối cùng bị treo, luôn ở trên cùng một điểm: WebThread, trên hàm JavaScriptCore WTF::StringImpl::hash(). Nó tạo ra EXC_BAD_ACCESS (SIGSEGV), KERN_INVALID_ADDRESS at 0x00000001.UIWebView iOS 5: Lỗi WebKit/JavaScriptCore

UIWebView nằm trong bộ điều khiển chế độ xem được quản lý bởi bộ điều khiển chế độ xem khác (vùng chứa) theo kiểu xếp chồng. Tôi chỉ giữ bốn hoặc ít hơn các trình duyệt đó trong bộ nhớ.

Mọi thứ về nhật ký sự cố hoặc về những gì có thể gây ra sự cố?

Đây là nhật ký sự cố của thread web:

Thread 2 name: WebThread 
Thread 2 Crashed: 
0 JavaScriptCore     0x32a97d46 WTF::StringImpl::hash() const + 42 
1 JavaScriptCore     0x32a97c6a WTF::HashTable<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >::lookupForWriting(WTF::StringImpl* const&) + 18 
2 JavaScriptCore     0x32a9b028 std::pair<WTF::HashTableIterator<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >, bool> WTF::HashTable<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityExtractor<WTF::StringImpl*>, WTF::StringHash, WTF::HashTraits<WTF::StringImpl*>, WTF::HashTraits<WTF::StringImpl*> >::add<WTF::StringImpl*, WTF::StringImpl*, WTF::IdentityHashTranslator<WTF::StringImpl*, WTF::StringImpl*, WTF::StringHash> >(WTF::StringImpl* const&, WTF::StringImpl* const&) + 448 
3 JavaScriptCore     0x32a9ae30 WTF::AtomicString::addSlowCase(WTF::StringImpl*) + 96 
4 WebCore       0x31bade0c WebCore::AtomicHTMLToken::initializeAttributes(WTF::Vector<WebCore::HTMLToken::Attribute, 10ul> const&) + 232 
5 WebCore       0x31b88076 WebCore::AtomicHTMLToken::AtomicHTMLToken(WebCore::HTMLToken&) + 302 
6 WebCore       0x31b87eae WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&) + 14 
7 WebCore       0x31b7d07e WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) + 150 
8 WebCore       0x31bee29a WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution() + 50 
9 WebCore       0x31bc87e6 WebCore::HTMLDocumentParser::notifyFinished(WebCore::CachedResource*) + 78 
10 WebCore       0x31bc7448 WebCore::CachedResource::checkNotify() + 40 
11 WebCore       0x31bc7308 WebCore::CachedScript::data(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) + 84 
12 WebCore       0x31bc7240 WebCore::CachedResourceRequest::didFinishLoading(WebCore::SubresourceLoader*, double) + 120 
13 WebCore       0x31bc715e WebCore::SubresourceLoader::didFinishLoading(double) + 158 
14 WebCore       0x31bc58c2 _ZN7WebCoreL16didFinishLoadingEP16_CFURLConnectionPKv + 46 
15 CFNetwork      0x347737ee URLConnectionClient::_clientDidFinishLoading(URLConnectionClient::ClientConnectionEventQueue*) + 186 
16 CFNetwork      0x3476849e URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload(XConnectionEventInfo<XClientEvent, XClientEventParams>*, long) + 418 
17 CFNetwork      0x3476819c URLConnectionClient::processEvents() + 100 
18 CFNetwork      0x347680d2 MultiplexerSource::perform() + 150 
19 CoreFoundation     0x313d2acc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 8 
20 CoreFoundation     0x313d2298 __CFRunLoopDoSources0 + 208 
21 CoreFoundation     0x313d103e __CFRunLoopRun + 646 
22 CoreFoundation     0x3135449e CFRunLoopRunSpecific + 294 
23 CoreFoundation     0x31354366 CFRunLoopRunInMode + 98 
24 WebCore       0x31b74c9c _ZL12RunWebThreadPv + 396 
25 libsystem_c.dylib    0x33bca72e _pthread_start + 314 
26 libsystem_c.dylib    0x33bca5e8 thread_start + 0 

Trả lời

0

Như nhật ký sự cố cho thấy, có vẻ như nó có thể là một vấn đề liên quan đến JavaScript. Tôi cho rằng trang bạn đang tải có JavaScript trên đó? Không quan tâm, trang web có chạy tốt trong Mobile Safari - chỉ trong UIWebView mà bạn gặp sự cố?

Nếu bạn không thể sửa đổi JS hoặc trang web có vẻ chạy tốt trên các trình duyệt hoặc thiết bị di động/máy tính để bàn khác, tôi khuyên bạn nên gửi lỗi với Apple cùng với JavaScript được sử dụng để tái tạo sự cố.

11

Tôi đã gặp vấn đề tương tự, đã dành cả ngày ... Có rất nhiều lỗi WebKit khác nhau như thế này. Cuối cùng, tôi hiểu rồi: đây là một vấn đề đa luồng! Tôi đã tạo WebView từ chuỗi 1, sau đó cố sửa đổi nội dung của nó bằng các hàm JS trong chuỗi 2 ...

Sửa lỗi đơn giản performSelectorOnMainThread:withObject:waitUntilDone:!

Có thể điều này sẽ giúp ai đó.

+0

rất mới để xCode nơi để chạy hoặc đặt dòng này 'performSelectorOnMainThread: withObject: waitUntilDone:' – Khaleel

+1

@Khaleel Trước tiên, bạn nên đọc cách sử dụng đa luồng, làm thế nào để các luồng tương tác. Sau đó, nó sẽ được rõ ràng nơi để đặt chức năng đó. :) Hoặc, bạn có thể đăng mã của mình và báo cáo sự cố trong một câu hỏi khác, chúng tôi sẽ nói ở đó. –

+0

thay vì gọi một hàm gọi nó qua số self.performSelectorOnMainThread ("YOURFUNCTIONNAME:", withObject: postString, waitUntilDone: true) –