• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 在 UITableview reloadData 上报告崩溃

[复制链接]
菜鸟教程小白 发表于 2022-12-13 13:37:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我从 Crashlytics 收到一份崩溃报告,该报告总是在同一个地方,但我无法复制崩溃。

这似乎只是 iOS 9 上的用户,而且只是非常偶尔。我不确定这是代码问题还是其他问题。最后一行提到 libdispatch.dylib 丢失,再次,不确定是否相关。

Crashlytics 表示崩溃发生在 MMDetailTableVC.m 第 1407 行,即 reloadData 行。

报告内容如下:

Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000001

Thread : Crashed: com.apple.main-thread
0  libobjc.A.dylib           0x20f0fae2 objc_msgSend + 1
1  CoreFoundation            0x2168b91b -[NSDictionary descriptionWithLocale:indent:] + 310
2  Foundation                0x21e77e2d _NSDescriptionWithLocaleFunc + 60
3  CoreFoundation            0x217091a3 __CFStringAppendFormatCore + 7986
4  CoreFoundation            0x21707255 _CFStringCreateWithFormatAndArgumentsAux2 + 80
5  CoreFoundation            0x2171f559 _CFLogvEx2 + 96
6  CoreFoundation            0x2171f9af _CFLogvEx3 + 118
7  Foundation                0x21f3f4f7 _NSLogv + 126
8  Foundation                0x21e8679d NSLog + 28
9  UIKit                     0x259b45fb -[UITableView reloadData] + 1818
10 Simple Meeting Minutes    0x91fff -[MMDetailTableVC saveItemEntry:] (MMDetailTableVC.m:1407)
11 Simple Meeting Minutes    0xa2edf -[MMItemViewController saveButtonAction:] (MMItemViewController.m:526)
12 UIKit                     0x25905771 -[UIApplication sendAction:to:from:forEvent:] + 80
13 UIKit                     0x25a86c71 -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 140
14 UIKit                     0x25905771 -[UIApplication sendAction:to:from:forEvent:] + 80
15 UIKit                     0x25905701 -[UIControl sendAction:to:forEvent:] + 64
16 UIKit                     0x258ed61f -[UIControl _sendActionsForEvents:withEvent:] + 446
17 UIKit                     0x258ed74b -[UIControl _sendActionsForEvents:withEvent:] + 746
18 UIKit                     0x25905051 -[UIControl touchesEnded:withEvent:] + 616
19 UIKit                     0x25904cbf -[UIWindow _sendTouchesForEvent:] + 646
20 UIKit                     0x258fd5d7 -[UIWindow sendEvent:] + 642
21 UIKit                     0x258ce119 -[UIApplication sendEvent:] + 204
22 UIKit                     0x258cc757 _UIApplicationHandleEventQueue + 5134
23 CoreFoundation            0x216f9257 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
24 CoreFoundation            0x216f8e47 __CFRunLoopDoSources0 + 454
25 CoreFoundation            0x216f71af __CFRunLoopRun + 806
26 CoreFoundation            0x21649bb9 CFRunLoopRunSpecific + 516
27 CoreFoundation            0x216499ad CFRunLoopRunInMode + 108
28 GraphicsServices          0x228c3af9 GSEventRunModal + 160
29 UIKit                     0x25935fb5 UIApplicationMain + 144
30 Simple Meeting Minutes    0x8c59f main (main.m:16)
31 libdispatch.dylib         0x212fc873 (Missing)

这是我的 saveItemEntry 代码,它似乎总是发生崩溃的地方。

- (void)saveItemEntryMMitem *)item{

    if (item)
    {
         NSString *resultStr = [self.meetingModel saveItem:item];

        if ([resultStr isEqualToString"OK"])
        {
            // all good so close form and refresh data
            [_itemViewController dismissViewControllerAnimated:NO completion:nil];

            [self.tableView reloadData];

            // or if there is an error result then display message
        }
        else if ([resultStr isEqualToString"DescriptionNotesMissing"])
        {
            [self showAlert"Missing Description or Notes" "An Item Description or Notes is required" :0];
            [self.itemViewController.itemDescription becomeFirstResponder];
        }
        // for any other error do nothing
    }
}



Best Answer-推荐答案


我们不知道你是否在主线程中调用了这个方法。

tableview 也需要时间来重新加载它的单元格。所以如果你能把这些代码添加到 dispatch_get_main_queue

那就太好了
dispatch_async(dispatch_get_main_queue(), ^(void){
   [_itemViewController dismissViewControllerAnimated:NO completion:nil];
   [self.tableView reloadData];
}

dispatch_async(dispatch_get_main_queue(), ^(void){
   [self showAlert"Missing Description or Notes" "An Item Description or Notes is required" :0];
   [self.itemViewController.itemDescription becomeFirstResponder];
}

如果我们正在使用 dispatch_async(dispatch_get_main_queue(), ^(void){ 来刷新任何通知或委托(delegate)的 UI,这将是非常安全的

关于ios - 在 UITableview reloadData 上报告崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849636/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap