Tôi đang cố gắng sử dụng một đơn giản UITextView
trong chế độ xem cơ bản, nhưng nó khiến ứng dụng gặp sự cố không thường xuyên. Đôi khi nó bị treo khi tôi đang gõ gì đó trong đó, đôi khi tôi đang cuộn, đôi khi sau khi tôi nhấn phím trả về. Từ theo dõi ngăn xếp, có vẻ như nó được gây ra bởi mã đồ họa hoặc hoạt ảnh liên quan để hiển thị các yếu tố giao diện người dùng để kiểm tra lỗi chính tả, kiểm tra ngữ pháp, v.v.Simple UITextView crashing
Tại sao ứng dụng này bị lỗi? Tôi có cần phải nhập các thư viện bổ sung hay tôi cần chỉ định một số loại đại biểu cho UITextView? Tôi có nghĩa là chỉ có một UITextView đơn giản trong một khung nhìn barebones, không có gì lạ mắt.
Dưới đây là stack trace:
Program received signal: “EXC_BAD_ACCESS”.
(gdb) bt
#0 0x9535f9b1 in ??()
#1 0x9534c33f in ??()
#2 0x9534c13e in ??()
#3 0x9634df5c in ??()
#4 0x9418d244 in CGDataProviderRetain()
#5 0x963b7036 in ??()
#6 0x98263486 in CGImageReadCreateWithProvider()
#7 0x982633a2 in CGImageSourceCreateWithDataProvider()
#8 0x020c0947 in CGImageCreateWithPNGDataProvider()
#9 0x02ebfeed in WKGraphicsCreateImageFromBundleWithName()
#10 0x02ebfc3b in WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar()
#11 0x02ebf9cb in WebCore::InlineTextBox::paintSpellingOrGrammarMarker()
#12 0x02e73932 in WebCore::InlineTextBox::paintDocumentMarkers()
#13 0x02e730a1 in WebCore::InlineTextBox::paint()
#14 0x02e717ef in WebCore::InlineFlowBox::paint()
#15 0x02e71565 in WebCore::RootInlineBox::paint()
#16 0x02e71220 in WebCore::RenderLineBoxList::paint()
#17 0x0354c451 in WebCore::RenderBlock::paintContents()
#18 0x02e6d7bd in WebCore::RenderBlock::paintObject()
#19 0x02e6ed51 in WebCore::RenderBlock::paint()
#20 0x02e6dcf2 in WebCore::RenderBlock::paintChildren()
#21 0x02e6d7bd in WebCore::RenderBlock::paintObject()
#22 0x02e6ed51 in WebCore::RenderBlock::paint()
#23 0x02e6c502 in WebCore::RenderLayer::paintLayer()
#24 0x02e6bce3 in WebCore::RenderLayer::paintLayer()
#25 0x02e6b635 in WebCore::RenderLayer::paint()
#26 0x02e6b3de in WebCore::FrameView::paintContents()
#27 0x03bd71da in -[WebFrame(WebInternal) _drawRect:contentsOnly:]()
#28 0x03bd7104 in -[WebHTMLView drawSingleRect:]()
#29 0x02e6af68 in _WKViewDraw()
#30 0x02e6b03f in _WKViewDraw()
#31 0x02e6b03f in _WKViewDraw()
#32 0x02e6b03f in _WKViewDraw()
#33 0x02e6b03f in _WKViewDraw()
#34 0x02e6adb0 in WKViewDisplayRect()
#35 0x02e6ad41 in WKWindowDrawRect()
#36 0x02e6a9d3 in WebCore::TileCache::drawLayer()
#37 0x04041d63 in backing_callback()
#38 0x0404161e in CABackingStoreUpdate()
#39 0x040407f4 in -[CALayer _display]()
#40 0x02e6a3d4 in -[TileLayer display]()
#41 0x040402b1 in CALayerDisplayIfNeeded()
#42 0x0403f65b in CA::Context::commit_transaction()
#43 0x0403f2b0 in CA::Transaction::commit()
#44 0x04046f5b in CA::Transaction::observer_callback()
#45 0x02391d1b in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__()
#46 0x02326987 in __CFRunLoopDoObservers()
#47 0x022efc17 in __CFRunLoopRun()
#48 0x022ef280 in CFRunLoopRunSpecific()
#49 0x022ef1a1 in CFRunLoopRunInMode()
#50 0x02c152c8 in GSEventRunModal()
#51 0x02c1538d in GSEventRun()
#52 0x002e2b58 in UIApplicationMain()
EDIT: nó có vẻ như điều này được thực sự được gây ra bởi các chức năng autocorrection, như stack trace ám chỉ. Nếu tôi đặt thuộc tính "Correction" trong "Text Input Traits" trong Interface Builder (tôi tin rằng đó là thuộc tính autocorrectionType của giao thức UITextInputTraits) thành "No", thì vấn đề sẽ biến mất. Với tính năng tự động sửa lỗi, tôi luôn có thể tạo lại lỗi bằng cách nhập các từ sai chính tả.
Một điều cần lưu ý là đây là SDK iOS 4.1 mới nhất mà tôi vừa tải xuống hôm qua, vì vậy tôi không biết đây có phải là lỗi UITextView trong SDK mới nhất hay không.
CHỈNH SỬA 2: Ồ, tôi thực sự bối rối vì điều này. Tôi đã tạo ra một vài dự án mới từ đầu và cố gắng hiển thị các bộ điều khiển xem phương thức với UITextViews, và tất cả chúng đều không có vấn đề gì. Tuy nhiên, khi tôi cố gắng làm tương tự trong ứng dụng thực tế của mình - bất kể bộ điều khiển nào tôi cố gắng gọi một bộ điều khiển chế độ xem từ - nó luôn luôn bị treo. Tôi đã đun sôi mã xuống thanh barebones và nó vẫn bị treo. Dưới đây là cách tôi khởi tạo trình điều khiển chế độ xem phương thức:
- (IBAction)showFeedback:(id)sender {
FooViewController *controller = [[FooViewController alloc] initWithNibName:@"FooView" bundle:nil];
[self presentModalViewController:controller animated:YES];
[controller release];
}
FooViewController chỉ là bộ điều khiển chế độ xem khung được tạo bởi Xcode kế thừa từ UIViewController. Không có gì bị ghi đè. Tệp nib của tôi chỉ chứa một khung nhìn trống rỗng với một khung nhìn đơn thuần là UITextView. Mọi thứ khác là mặc định.
Sự cố luôn xảy ra ngay sau khi tôi nhập một từ sai chính tả, và trình mô phỏng cố gắng hiển thị gạch chân màu đỏ.
Tôi cũng đã thử chạy với NSZombieEnabled và tôi không thấy bất kỳ điều gì trong nhật ký về thư được gửi tới zombie.
Ứng dụng của tôi khá đơn giản - một ứng dụng dựa trên tab có bộ điều khiển điều hướng cho từng tab trong số 5 tab của tôi. Sau đó, 5 bộ điều khiển chế độ xem tùy chỉnh của tôi được đặt làm bộ điều khiển gốc của mỗi bộ điều khiển điều hướng. Tôi hiện đang có một trong các bộ điều khiển xem tùy chỉnh của tôi tạo và trình bày bộ điều khiển phương thức. Tôi đã thử bình luận ra bất kỳ cuộc gọi phát hành trong bộ điều khiển xem cha mẹ, để avail không có.
Điều tôi không hiểu là đối tượng đồ họa nào đang cố gắng truy cập có thể đã được phát hành (hoặc không giữ lại) thuộc trách nhiệm của ứng dụng đối với việc quản lý bộ nhớ? Điều duy nhất có thể, trong tâm trí của tôi, là UITextView, và tôi đã cố gắng tuyên bố nó như là một tài sản với giữ lại, và thiết lập nó như là một lối thoát với Interface Builder. Tuy nhiên, tai nạn tương tự.
Bất kỳ trợ giúp nào được đánh giá cao !!!
Cần biết thêm chi tiết: (1) Làm thế nào bạn thêm độ xem văn bản để "xem cơ bản"? Bạn có sử dụng Trình tạo giao diện hoặc bạn thêm nó theo chương trình không? (2) Nếu lập trình thì hãy đăng mã tạo/bổ sung. –
Tôi đang sử dụng Trình tạo giao diện và UITextView được kết nối với ổ cắm được khai báo trong bộ điều khiển chế độ xem. Nó khá là nhiều. Một điều tôi đã không đề cập đến là bộ điều khiển xem được trình bày như một bộ điều khiển xem phương thức. Tôi chỉ cần làm theo mã mẫu của Apple trong các tài liệu cho "Modal View Controllers" để khởi tạo bộ điều khiển xem từ một ngòi, và trình bày nó một cách bình thường. Chế độ xem phương thức chứa UITextView, chỉ bị treo vì các lý do không xác định. – pmc255
Chỉ ra rằng có một hình ảnh cụ thể gây ra sự cố. Khi hình ảnh cụ thể này được tải với [UIImage imageWithData: ...], các tương tác tiếp theo với UITextView dẫn đến việc gạch dưới chính tả dẫn đến sự cố. Điều này chỉ xảy ra với một hình ảnh, hình ảnh đó không có vẻ không đúng định dạng hoặc bất kỳ thứ gì. Tôi đã nộp lỗi này với Apple. – pmc255