3

私はuitableviewcontrollerを持っていて、テーブルビューのviewForFooterInSectionとしてuiwebviewをロードしています

この Web ビューには、いくつかの 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;
}

これで、この Web ビューをテーブルビューのセクションのフッターのビューとして設定しました

- (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 のみを追加しました。

4

1 に答える 1

0

これはかなり不可解です。begin/endUpdates を削除してみてください:

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

クラッシュが で発生しendUpdatesていることがわかったので、その時点までに実行された残りのすべては問題なく実行されました。

reloadData別の方法として、 を介してセクションを再ロードするだけでなく、を呼び出してテーブル全体を再ロードすることもできますreloadSections。これは最適化されたものではありませんが、行数が少ないため、実際には問題にならないはずです (うまく機能する場合)...

古い答え:

テーブル ビュー内のオブジェクトの 1 つが割り当て解除され、再度アクセスされているようです。これは典型的な「ゾンビ」問題です。

Xcode でゾンビ検出を有効にすると、何が起こっているのかについての手がかりを得ることができます。

ここでは、ゾンビを有効にする方法を確認できます

その場合、コンソール ログに表示されるエラー メッセージに、どのオブジェクトが早期に割り当て解除されたかに関する詳細情報が表示されます。

クラッシュは現場で発生したため、クラッシュ ログを添付しているとのことですが、この場合、2 つのオプションがあります。自分で問題を再現する (そして、ゾンビ検出を使用して修正する)。または、メモリ管理を注意深く調べて、テーブル ビューに表示されるオブジェクトの問題を見つけてください。

于 2012-07-24T08:03:52.443 に答える