Swift 5 LLDB 错误 : warning: <EXPR>:12:9: warning: initialization of variable '$__lldb_error_result' was never used

标签 swift uitableview dictionary generics lldb

完整的错误信息:

error: warning: <EXPR>:12:9: warning: initialization of variable '$__lldb_error_result' was never used; consider replacing with assignment to '_' or removing it
    var $__lldb_error_result = __lldb_tmp_error
    ~~~~^~~~~~~~~~~~~~~~~~~~
    _

error: <EXPR>:19:5: error: use of unresolved identifier '$__lldb_injected_self'
    $__lldb_injected_self.$__lldb_wrapped_expr_7(
    ^~~~~~~~~~~~~~~~~~~~~

当我询问 Dictionary<String, String> 的值时,此错误出现在控制台中泛型中的属性 UITableViewController (TVC)。

更多详情...

我有一个通用 TVC(如上所述),它或多或少基于 Florian Kugler 和 Daniel Eggert 在“核心数据”一书中概述的框架,并采用了 T 的通用值。
class TVCDataSource_List<T: Managed, etc...>

此通用 TVC 包括一个字典,该字典旨在为 TVC 的部分标题保存更长的“替代”名称列表。
var dictionarySectionData: [String: String] = [:]

我选择以这种方式对 TVC 进行编程,因为将名称的引用保存为两个短字符 String 似乎更有效。在数据模型属性(节标识符)中比一个长名称作为 String .

我尝试在代码中的许多不同位置填充这本字典,其中大部分都有效,但结果都相同,特别是:
  • 我使用调试器单步执行代码,正如预期的那样,字典是通过对持久存储的单个获取请求填充的;
  • 紧接着,拨打 print(dictionarySectionData.description)到控制台,按预期打印出正确填充的字典;
  • 使用 p dictionarySectionData 查询 LLDB (或 po)在此 print 之前和之后到控制台,生成此问题开头详细说明的完整错误消息;
  • 同时,Assistant Editor Variable Viewer 显示字典为空,意外与打印冲突;
  • 我继续单步执行代码来构建 TVC,因为字典不再有它的键值对,我无法记忆起我的节标题的值,并且正如预期的那样,控制台报告“致命错误:在解开 Optional 时意外发现 nil值(value)”。

  • 我做了一些简单的研究:
  • Blog作者 Scott Berrevoets,题为“重新绑定(bind)自我:调试器的断点(ing)点”。
  • Swift Bug Report由 Keith Smiley 撰写,标题为“LLDB:警告:变量 '$__lldb_error_result' 的初始化”。
  • Swift Bug Report作者 Zev Eisenberg 题为“错误:在 NSAttributedString 扩展中使用未声明的类型‘$__lldb_context’”。

  • 似乎我可能有:
  • 偶然发现编译器中的错误;或
  • 试图在通用 TVC 中设置字典的值,以便编译器解释重新绑定(bind)到 self 的尝试?

  • 坦率地说,根据我对编译器和 Swift 的浅薄了解,这两个我都不理解,需要我几个月甚至几年的学习和经验。我很高兴随着时间的推移慢慢积累。

    我确实有一个令人满意的解决方案......而不是在 TVC 生命周期开始时为 TVC 的部分标题构建一个更长的“替代”名称字典,我每次运行一个获取请求代码解析当前 TVC 的名称节标题。这完美地工作并且不会阻塞用户界面(还)。

    然而,让我很恼火的是,我无法在构建通用 TVC 时运行一次提取来为 TVC 的部分标题准备一个包含更长“替代”名称的简明字典,而是必须为每个部分运行一次提取用户决定滚动浏览。执行一次提取并在内存中保存 12-15 个键值对的字典似乎比运行多次提取更有效。

    有没有人遇到过这个问题?

    如果是这样,你能提供任何建议吗?

    更新

    问题似乎出在我使用 - 或者更准确地说,是我的误用 - 明确打开的 Optional .

    这是我用来填充字典的代码......
    func createDictionaryOfSectionHeaderText() {
    
        let request = Types.preparedFetchRequest
        // noting .preparedFetchRequest is a static var, available through generics
    
        let key = "typeParent.typeParentName"
        let name = "Taxonomy"
        let predicate = NSPredicate(format: "%K == %@", argumentArray: [key, name])
    
        request.predicate = predicate
    
        var results: [Types] = []
    
        do {
    
            results = try <<My NSManagedObjectContext>>.fetch(request)
        }
        catch {
    
            let fetchError = error
            print(fetchError)
        }
    
        for type in results {
    
            let formatSortOrder = String(format: "%02d", type.sortOrder)
            dictionarySectionData[formatSortOrder] = type.typeName
        }
    }
    

    有两个代码元素导致了错误消息......

    A. 如上 func createDictionaryOfSectionHeaderText()
    let stringSortOrder = String(type.sortOrder)
    let formatSortOrder = String(format: "%02d", stringSortOrder)
    

    ...将字符串输入格式“%02d”,效果不确定...待定。

    (现在从这两行更改为单行 let formatSortOrder = String(format: "%02d", type.sortOrder) - 这当然有效。)

    B.内UITableViewDelegate方法 func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
    stringHeaderText = dictionarySectionData[stringSectionName]!
    // "Fatal error: Unexpectedly found nil while unwrapping an Optional value"
    

    ...在对此事进行更多思考之后,当明确解开 Optional 时,当该 Optional 为零时,这完全符合预期!

    因此,当我将 setter 更改为 stringHeaderText 时通过删除显式解包的指令,而是在 nil 时提供默认值,我的编程问题就消失了。
    stringHeaderText = dictionarySectionData[stringSectionName] ?? "ERROR"
    

    如果/当我更好地理解这一点时,我什至可以提供答案。

    最佳答案

    这些问题应该在 XCode 12 中解决。
    XCode 10 和 11 确实存在很多错误,尤其是在泛型方面

    关于Swift 5 LLDB 错误 : warning: <EXPR>:12:9: warning: initialization of variable '$__lldb_error_result' was never used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55685002/

    相关文章:

    Swift:UIButton edgeinsets 在单元格重绘/滚动后应用

    iphone - 在 'UITableView' 中选择一行时调用新 View

    iphone - 在 ViewController 和 TabBar child 之间传递数据

    python - 递增嵌套 Python 字典

    ios - 裁剪为形状的 SwiftUI 图像在上下文菜单中具有透明填充

    swift - 在 Swift 2 Xcode 7 中从 .pls 接收元数据

    ios - 计算核心数据实体的属性

    swift - 在字典中检查 nil

    Python合并两个字典

    ios - 禁用表格 View 中的弹跳使得在尝试过度滚动后点击单元格两次