UITableView willDisplayCell崩溃

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableView willDisplayCell崩溃相关的知识,希望对你有一定的参考价值。

我在我的应用程序中的特定行上发生间歇性崩溃。我无法重现这个问题。在我使用两个不同的iPad和所有模拟器进行的所有测试中,我都无法让它崩溃,但是在过去的一个月中我发生了36次用户崩溃。 以下是CrashLytics的相关代码和崩溃报告。 该线始终显示为崩溃;

cell.textLabel.text = [NSString stringWithFormat:NSLocalizedString(@"Purchase Full Version Now (%@)",nil), self.sellPrice];

希望有人可以提供帮助,我感谢任何建议。

(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UILabel *titleCellLabel = [[UILabel alloc] init];

    if (indexPath.section == 0){
        switch (indexPath.row) {
            case 0:
                cell.textLabel.text = NSLocalizedString(@"Default Type",nil);
                break;
            case 1:
                cell.textLabel.text = NSLocalizedString(@"Default Attendee",nil);
                break;
            case 2:
                cell.textLabel.text = NSLocalizedString(@"PDF Set-up",nil);
                break;
            case 3:
                titleCellLabel.text = NSLocalizedString(@"Topic and Item Numbering",nil);
                titleCellLabel.font = [UIFont systemFontOfSize:17 weight:UIFontWeightBold];
                titleCellLabel.textColor = [UIColor blackColor];
                [titleCellLabel sizeToFit];
                titleCellLabel.frame = CGRectMake(20, 12, titleCellLabel.frame.size.width, titleCellLabel.frame.size.height);
                [[cell contentView] addSubview:titleCellLabel];
                break;
            default:
            break;
        }
    }

    if (indexPath.section == 1){
        switch (indexPath.row) {
            case 0:
                cell.textLabel.text = NSLocalizedString(@"Version",nil);
                break;
            case 1:
                cell.textLabel.text = NSLocalizedString(@"Feedback",nil);
                break;
            case 2:
                cell.textLabel.text = NSLocalizedString(@"Help",nil);
                break;

            default:
                break;
        }
    }

    if (indexPath.section == 2){
        switch (indexPath.row) {
            case 0:
               cell.textLabel.text = NSLocalizedString(@"Backup Data to Email",nil);
               break;
            case 1:
                cell.textLabel.text = NSLocalizedString(@"Restore Previous Full Version Purchase",nil);
                break;
            case 2:
                cell.textLabel.text = [NSString stringWithFormat:NSLocalizedString(@"Purchase Full Version Now (%@)",nil), self.sellPrice];
                break;

            default:
                break;
        }
    }
}

这是崩溃报告;

# Crashlytics - plaintext stacktrace downloaded by Paul at Tue, 06 Feb 2018 01:22:20 GMT
# Platform: ios
# OS Version: 10.3.3 (14G60)
# Device: iPad 4
# RAM Free: 7.1%
# Disk Free: 13.2%

#0. Crashed: com.apple.main-thread
0  libobjc.A.dylib                0x1aeb1f4c fixupMethodList(method_list_t*, bool, bool) + 103
1  libobjc.A.dylib                0x1aea4d01 NXMapInsert + 62
2  libobjc.A.dylib                0x1aeb19e9 prepareMethodLists(objc_class*, method_list_t**, int, bool, bool) + 88
3  libobjc.A.dylib                0x1aeab2d3 realizeClass(objc_class*) + 918
4  libobjc.A.dylib                0x1aeaebc7 lookUpImpOrForward + 94
5  libobjc.A.dylib                0x1aeaeb65 _class_lookupMethodAndLoadCache3 + 26
6  libobjc.A.dylib                0x1aeb51af _objc_msgSend_uncached + 14
7  Simple Meeting Minutes         0x96697 -[MMSettingsTableVC tableView:willDisplayCell:forRowAtIndexPath:] (MMSettingsTableVC.m:195)
8  UIKit                          0x21179ca9 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 814
9  UIKit                          0x21179de5 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 66
10 UIKit                          0x21167d79 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2190
11 UIKit                          0x2117e8db -[UITableView _performWithCachedTraitCollection:] + 92
12 UIKit                          0x20f2af0f -[UITableView layoutSubviews] + 178
13 UIKit                          0x20e49483 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1224
14 QuartzCore                     0x1eaa1cb7 -[CALayer layoutSublayers] + 126
15 QuartzCore                     0x1ea95d77 CA::Layer::layout_if_needed(CA::Transaction*) + 354
16 QuartzCore                     0x1ea95c05 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 16
17 QuartzCore                     0x1ea24839 CA::Context::commit_transaction(CA::Transaction*) + 320
18 QuartzCore                     0x1ea42fdb CA::Transaction::commit() + 578
19 UIKit                          0x20e3f93b _afterCACommitHandler + 238
20 CoreFoundation                 0x1bbdb803 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
21 CoreFoundation                 0x1bbd9a55 __CFRunLoopDoObservers + 282
22 CoreFoundation                 0x1bbda017 __CFRunLoopRun + 1358
23 CoreFoundation                 0x1bb2d1af CFRunLoopRunSpecific + 470
24 CoreFoundation                 0x1bb2cfd1 CFRunLoopRunInMode + 104
25 GraphicsServices               0x1d2d7b41 GSEventRunModal + 80
26 UIKit                          0x20eafa53 UIApplicationMain + 150
27 App Name                       0x63123 main (main.m:16)
28 libdyld.dylib                  0x1b31a4eb start + 2

#0. Crashed: com.apple.main-thread
0  libobjc.A.dylib                0x1aeb1f4c fixupMethodList(method_list_t*, bool, bool) + 103
1  libobjc.A.dylib                0x1aea4d01 NXMapInsert + 62
2  libobjc.A.dylib                0x1aeb19e9 prepareMethodLists(objc_class*, method_list_t**, int, bool, bool) + 88
3  libobjc.A.dylib                0x1aeab2d3 realizeClass(objc_class*) + 918
4  libobjc.A.dylib                0x1aeaebc7 lookUpImpOrForward + 94
5  libobjc.A.dylib                0x1aeaeb65 _class_lookupMethodAndLoadCache3 + 26
6  libobjc.A.dylib                0x1aeb51af _objc_msgSend_uncached + 14
7  App Name                       0x96697 -[MMSettingsTableVC tableView:willDisplayCell:forRowAtIndexPath:] (MMSettingsTableVC.m:195)
8  UIKit                          0x21179ca9 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 814
9  UIKit                          0x21179de5 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 66
10 UIKit                          0x21167d79 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2190
11 UIKit                          0x2117e8db -[UITableView _performWithCachedTraitCollection:] + 92
12 UIKit                          0x20f2af0f -[UITableView layoutSubviews] + 178
13 UIKit                          0x20e49483 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1224
14 QuartzCore                     0x1eaa1cb7 -[CALayer layoutSublayers] + 126
15 QuartzCore                     0x1ea95d77 CA::Layer::layout_if_needed(CA::Transaction*) + 354
16 QuartzCore                     0x1ea95c05 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 16
17 QuartzCore                     0x1ea24839 CA::Context::commit_transaction(CA::Transaction*) + 320
18 QuartzCore                     0x1ea42fdb CA::Transaction::commit() + 578
19 UIKit                          0x20e3f93b _afterCACommitHandler + 238
20 CoreFoundation                 0x1bbdb803 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
21 CoreFoundation                 0x1bbd9a55 __CFRunLoopDoObservers + 282
22 CoreFoundation                 0x1bbda017 __CFRunLoopRun + 1358
23 CoreFoundation                 0x1bb2d1af CFRunLoopRunSpecific + 470
24 CoreFoundation                 0x1bb2cfd1 CFRunLoopRunInMode + 104
25 GraphicsServices               0x1d2d7b41 GSEventRunModal + 80
26 UIKit                          0x20eafa53 UIApplicationMain + 150
27 App Name                       0x63123 main (main.m:16)
28 libdyld.dylib                  0x1b31a4eb start + 2

#1. Thread
0  libsystem_kernel.dylib         0x1b3ee73c __workq_kernreturn + 8
1  libsystem_pthread.dylib        0x1b4a2745 _pthread_wqthread + 728
2  libsystem_pthread.dylib        0x1b4a245c start_wqthread + 8

#2. com.apple.uikit.eventfetch-thread
0  libsystem_kernel.dylib         0x1b3d8900 mach_msg_trap + 20
1  libsystem_kernel.dylib         0x1b3d86e1 mach_msg + 44
2  CoreFoundation                 0x1bbdbbe3 __CFRunLoopServiceMachPort + 144
3  CoreFoundation                 0x1bbda065 __CFRunLoopRun + 1436
4  CoreFoundation                 0x1bb2d1af CFRunLoopRunSpecific + 470
5  CoreFoundation                 0x1bb2cfd1 CFRunLoopRunInMode + 104
6  Foundation                     0x1c481af5 <redacted> + 258
7  Foundation                     0x1c49e76d <redacted> + 86
8  UIKit                          0x217b0ad9 -[UIEventFetcher threadMain] + 128
9  Foundation                     0x1c5658eb <redacted> + 1122
10 libsystem_pthread.dylib        0x1b4a493b _pthread_body + 216
11 libsystem_pthread.dylib        0x1b4a485d _pthread_start + 234
12 libsystem_pthread.dylib        0x1b4a2468 thread_start + 8

#3. com.twitter.crashlytics.ios.MachExceptionServer
0  App Name                       0xbb343 CLSProcessRecordAllThreads + 1057603
1  App Name                       0xbb343 CLSProcessRecordAllThreads + 1057603
2  App Name                       0xbb23b CLSProcessRecordAllThreads + 1057339
3  App Name                       0xaf18d CLSHandler + 1008013
4  App Name                       0xaaed7 CLSMachExceptionServer + 990935
5  libsystem_pthread.dylib        0x1b4a493b _pthread_body + 216
6  libsystem_pthread.dylib        0x1b4a485d _pthread_start + 234
7  libsystem_pthread.dylib        0x1b4a2468 thread_start + 8

#4. com.apple.NSURLConnectionLoader
0  libsystem_kernel.dylib         0x1b3d8900 mach_msg_trap + 20
1  libsystem_kernel.dylib         0x1b3d86e1 mach_msg + 44
2  CoreFoundation                 0x1bbdbbe3 __CFRunLoopServiceMachPort + 144
3  CoreFoundation                 0x1bbda065 __CFRunLoopRun + 1436
4  CoreFoundation                 0x1bb2d1af CFRunLoopRunSpecific + 470
5  CoreFoundation                 0x1bb2cfd1 CFRunLoopRunInMode + 104
6  CFNetwork                      0x1c20a393 +[NSURLConnection(Loader) _resourceLoadLoop:] + 402
7  Foundation                     0x1c5658eb <redacted> + 1122
8  libsystem_pthread.dylib        0x1b4a493b _pthread_body + 216
9  libsystem_pthread.dylib        0x1b4a485d _pthread_start + 234
10 libsystem_pthread.dylib        0x1b4a2468 thread_start + 8

#5. Thread
0  libsystem_kernel.dylib         0x1b3ed808 __psynch_cvwait + 24
1  libsystem_pthread.dylib        0x1b4a3c43 _pthread_cond_wait + 560
2  libsystem_pthread.dylib        0x1b4a4fc5 pthread_cond_wait + 38
3  libc++.1.dylib                 0x1ae3fc57 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 118
4  javascriptCore                 0x1fa94261 <redacted> + 88
5  JavaScriptCore                 0x1fa941e5 <redacted> + 154
6  JavaScriptCore                 0x1fa940ed <redacted> + 18
7  JavaScriptCore                 0x1fa9432f <redacted> + 66
8  libsystem_pthread.dylib        0x1b4a493b _pthread_body + 216
9  libsystem_pthread.dylib        0x1b4a485d _pthread_start + 234
10 libsystem_pthread.dylib        0x1b4a2468 thread_start + 8

#6. WebThread
0  libsystem_kernel.dylib         0x1b3d8900 mach_msg_trap + 20
1  libsystem_kernel.dylib         0x1b3d86e1 mach_msg + 44
2  CoreFoundation                 0x1bbdbbe3 __CFRunLoopServiceMachPort + 144
3  CoreFoundation                 0x1bbda065 __CFRunLoopRun + 1436
4  CoreFoundation                 0x1bb2d1af CFRunLoopRunSpecific + 470
5  CoreFoundation                 0x1bb2cfd1 CFRunLoopRunInMode + 104
6  WebCore                        0x1fd4bce3 <redacted> + 426
7  libsystem_pthread.dylib        0x1b4a493b _pthread_body + 216
8  libsystem_pthread.dylib        0x1b4a485d _pthread_start + 234
9  libsystem_pthread.dylib        0x1b4a2468 thread_start + 8

#7. Thread
0  libsystem_kernel.dylib         0x1b3ee73c __workq_kernreturn + 8
1  libsystem_pthread.dylib        0x1b4a28eb _pthread_wqthread + 1150
2  libsystem_pthread.dylib        0x1b4a245c start_wqthread + 8

#8. Thread
0  libsystem_kernel.dylib         0x1b3ee73c __workq_kernreturn + 8
1  libsystem_pthread.dylib        0x1b4a28eb _pthread_wqthread + 1150
2  libsystem_pthread.dylib        0x1b4a245c start_wqthread + 8
答案

正如Brandon指出的那样,使用willDisplayCell并添加新的单元格内容标签,每次滚动都可能成为问题。我正在使用willDisplayCell,因为我需要在其中一个单元格中添加子视图标签。 因此,我不是使用willDisplayCell而是在Storybook中为每个单元创建IBOutlet,设置单元格文本标签并从viewDidLoad中加载单元子视图。这似乎工作正常,应该更稳定。 感谢您对Brandon的帮助,只需要有人指出显而易见的事情。

以上是关于UITableView willDisplayCell崩溃的主要内容,如果未能解决你的问题,请参考以下文章

UItableview 单元格的动态高度与 UItableview 单元格内的 UItableview

UITableView

水平 UITableView 中的垂直 UITableView

如何与重叠显示的 UITableView 交互另一个 UITableView

在 UITableView 中的 UINib 中重新加载 UITableView

iOS小技能:1. 什么是UITableView? 2. UITableView如何展示数据