gpt4 book ai didi

objective-c - UIWebView 作为 TableView 部分中页脚的 View 。奇怪的崩溃 - 附上崩溃日志

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:53 24 4
gpt4 key购买 nike

我有一个 uitableviewcontroller,我正在加载一个 uiwebview 作为 tableview 的 viewForFooterInSection

这个 webview 有一些正在加载的 html 内容。每当我尝试执行此操作时,应用程序都会崩溃

[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];

附上崩溃日志

Incident Identifier: DA08DEDA-3566-4A56-938A-57F4BCDF64F1
CrashReporter Key: ef8a5122f6b5431e4b29802596ec279644f97bd4
Hardware Model: iPod4,1
Process: sample [955]
Path: /var/mobile/Applications/A0B6D2C6-AA93-4D24-9C7F-666B8C7F94B4/sample.app/sample
Identifier: sample
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]

Date/Time: 2012-07-24 13:07:10.396 +0530
OS Version: iPhone OS 4.3.5 (8L1)
Report Version: 104

Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000c
Crashed Thread: 0

Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 WebCore 0x35fbc900 WebCore::TileCache::doLayoutTiles() + 24
1 WebCore 0x3609bed8 -[TileHostLayer renderInContext:] + 28
2 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220
3 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086
4 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220
5 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086
6 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220
7 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086
8 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220
9 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086
10 QuartzCore 0x336cc948 -[CALayer _renderSublayersInContext:] + 220
11 QuartzCore 0x336cbada -[CALayer renderInContext:] + 1086
12 UIKit 0x35b6b2dc -[_UITableViewUpdateSupport(Private) _imageViewForView:] + 68
13 UIKit 0x35b6a66a -[_UITableViewUpdateSupport(Private) _setupDeleteAnimationForFooterInSection:withTargetRect:forUpdateItem:] + 370
14 UIKit 0x35a7f91a -[_UITableViewUpdateSupport(Private) _setupAnimationsForDeletedHeadersAndFooters] + 1862
15 UIKit 0x35a78be6 -[_UITableViewUpdateSupport initWithTableView:updateItems:oldRowData:newRowData:oldRowRange:newRowRange:context:] + 398
16 UIKit 0x35a77dba -[UITableView(_UITableViewPrivate) _updateWithItems:withOldRowData:oldRowRange:newRowRange:context:] + 966
17 UIKit 0x35a7746c -[UITableView(_UITableViewPrivate) _endCellAnimationsWithContext:] + 4744
18 UIKit 0x35a812f2 -[UITableView endUpdatesWithContext:] + 22
19 UIKit 0x35a812ce -[UITableView endUpdates] + 10
20 sample 0x00007574 -[TableViewController tableView:didSelectRowAtIndexPath:] (TableViewController.m:188)
21 UIKit 0x3599c514 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 656
22 UIKit 0x35a000e4 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 124
23 Foundation 0x307ee6ce __NSFireDelayedPerform + 362
24 CoreFoundation 0x34e69a40 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
25 CoreFoundation 0x34e6bec4 __CFRunLoopDoTimer + 844
26 CoreFoundation 0x34e6c83e __CFRunLoopRun + 1082
27 CoreFoundation 0x34dfcebc CFRunLoopRunSpecific + 224
28 CoreFoundation 0x34dfcdc4 CFRunLoopRunInMode + 52
29 GraphicsServices 0x30de0418 GSEventRunModal + 108
30 GraphicsServices 0x30de04c4 GSEventRun + 56
31 UIKit 0x35976d62 -[UIApplication _run] + 398
32 UIKit 0x35974800 UIApplicationMain + 664
33 sample 0x000024ac main (main.m:16)
34 sample 0x00002440 start + 32

Thread 1 name: Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0 libsystem_kernel.dylib 0x36906fbc kevent + 24
1 libdispatch.dylib 0x36aa5032 _dispatch_mgr_invoke + 706
2 libdispatch.dylib 0x36aa603a _dispatch_queue_invoke + 86
3 libdispatch.dylib 0x36aa55ea _dispatch_worker_thread2 + 186
4 libsystem_c.dylib 0x3663558a _pthread_wqthread + 258
5 libsystem_c.dylib 0x36635bbc start_wqthread + 0

Thread 2 name: WebThread
Thread 2:
0 libsystem_kernel.dylib 0x36903c00 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x36903758 mach_msg + 44
2 CoreFoundation 0x34e6a2b8 __CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x34e6c562 __CFRunLoopRun + 350
4 CoreFoundation 0x34dfcebc CFRunLoopRunSpecific + 224
5 CoreFoundation 0x34dfcdc4 CFRunLoopRunInMode + 52
6 WebCore 0x35f1a27e _ZL12RunWebThreadPv + 382
7 libsystem_c.dylib 0x3663430a _pthread_start + 242
8 libsystem_c.dylib 0x36635bb4 thread_start + 0

Thread 3:
0 libsystem_kernel.dylib 0x36903c00 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x36903758 mach_msg + 44
2 CoreFoundation 0x34e6a2b8 __CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x34e6c562 __CFRunLoopRun + 350
4 CoreFoundation 0x34dfcebc CFRunLoopRunSpecific + 224
5 CoreFoundation 0x34dfcdc4 CFRunLoopRunInMode + 52
6 Foundation 0x307937f6 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 206
7 Foundation 0x30786382 -[NSThread main] + 38
8 Foundation 0x307f85c6 __NSThread__main__ + 966
9 libsystem_c.dylib 0x3663430a _pthread_start + 242
10 libsystem_c.dylib 0x36635bb4 thread_start + 0

Thread 4 name: com.apple.CFSocket.private
Thread 4:
0 libsystem_kernel.dylib 0x36905c60 __select + 20
1 CoreFoundation 0x34e6f8f2 __CFSocketManager + 582
2 libsystem_c.dylib 0x3663430a _pthread_start + 242
3 libsystem_c.dylib 0x36635bb4 thread_start + 0

Thread 5:
0 libsystem_kernel.dylib 0x369063ec __workq_kernreturn + 8
1 libsystem_c.dylib 0x366356d8 _pthread_wqthread + 592
2 libsystem_c.dylib 0x36635bbc start_wqthread + 0

Thread 0 crashed with ARM Thread State:
r0: 0x00000000 r1: 0x3ef7c298 r2: 0x00562ab2 r3: 0x00000000
r4: 0x001f8c70 r5: 0x00164f80 r6: 0x2fdfd718 r7: 0x2fdfd68c
r8: 0x2fdfd6e8 r9: 0x001fc0a0 r10: 0x001f8c70 r11: 0x00164f80
ip: 0x3f05e428 sp: 0x2fdfd5f4 lr: 0x3609bedf pc: 0x35fbc900
cpsr: 0x60000030

更新 1:

我对此进行了更深入的研究,除非我错过了一些明显的东西,否则这似乎是苹果的一些错误

我尝试创建一个新的 Master Detail iphone 应用程序并在 MasterViewController(UITableViewController) 中添加一个 UIWebView 属性并初始化它

@interface MasterViewController () {
NSMutableArray *_objects;
}

@property(nonatomic, strong) UIWebView *webView;

@end

@implementation MasterViewController

@synthesize detailViewController = _detailViewController;
@synthesize webView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"Master", @"Master");
webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 50.0)];
}
return self;
}

现在我已将此 webview 设置为 tableview 中该部分的页脚 View

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return webView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 50.0;
}

在 didSelectRowAtIndexPath 中我做了以下操作

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];
}

现在,每当我触摸一行时,我都会遇到同样的崩溃,我不知道为什么会这样。

这是一个全新的应用程序,其中包含默认代码。我只添加了 webView 作为 tableview 的页脚。

最佳答案

这很令人费解。你会尝试删除 begin/endUpdates:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop];
}

我看到崩溃发生在 endUpdates 中,所以到那时为止执行的所有其余部分都完美无缺。

您可以尝试的另一件事是通过调用 reloadData 重新加载整个表,而不是仅通过 reloadSections 重新加载部分。这不是最优化的,但由于你的行数很少,所以实际上应该无关紧要(如果它工作得更好)......

旧答案:

您的 TableView 中的对象之一似乎正在被释放,然后再次被访问。这是一个典型的“僵尸”问题。

您可以通过在 Xcode 中启用僵尸检测来了解正在发生的事情的一些线索。

Here you can find out how to enable zombies .

如果您这样做,那么您在控制台日志中收到的错误消息将提供有关哪个对象被过早释放的更多信息。

我了解到您附上了崩溃日志,因为崩溃发生在现场。在这种情况下,您有两个选择:要么在您身边重现问题(并借助僵尸检测修复它);要么或仔细检查您的内存管理以找出 TableView 中显示的对象的任何问题。

关于objective-c - UIWebView 作为 TableView 部分中页脚的 View 。奇怪的崩溃 - 附上崩溃日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11626572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com