完整的错误信息:
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
之前和之后到控制台,生成此问题开头详细说明的完整错误消息; 我做了一些简单的研究:
似乎我可能有:
坦率地说,根据我对编译器和 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/