完整错误消息:
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>
(TVC)中的UITableViewController
属性值时,该错误会出现在控制台中。
更多详细信息...
我有一个通用的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
进行控制台操作之前和之后立即使用po
(或print
)查询LLDB,会在此问题开始时生成详细的完整错误消息; 我做了一些简单的研究:
似乎我可能有一个:
坦率地说,我都不了解,并且从我对编译器和Swift的浅浅了解,都不会花费我数月甚至数年的学习和经验。我很高兴随着时间的推移逐渐积累。
我确实有一个令人满意的解决方案...而不是在TVC生命周期开始时为TVC的节标题构建更长的“替代”名称的字典,而是在每个时间运行提取请求,代码将为当前的TVC部分标题。这样可以完美工作,并且不会阻止UI。
但是,真正让我烦恼的是,我无法在通用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”格式输入字符串,不确定效果如何... TBA。
(现在从这两行更改为单行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为nil时,)完全符合预期!
因此,当我通过删除指令以显式展开来将setter更改为stringHeaderText
并在nil时提供默认值时,我的编程问题就消失了。
stringHeaderText = dictionarySectionData[stringSectionName] ?? "ERROR"
如果我更了解这一点,我什至可以提供答案。
答案 0 :(得分:0)
这些问题应在XCode 12中解决。 XCode 10和11中确实存在很多错误,尤其是在泛型方面。