and*_*der 9 generics dictionary uitableview lldb swift
完整的错误消息:
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(
^~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
当我查询Dictionary<String, String>
通用UITableViewController
(TVC)中的属性值时,在控制台中会出现此错误。
更多详情...
我有一个通用的TVC(如上所述),它或多或少地基于Florian Kugler和Daniel Eggert在“核心数据”一书中概述的框架,并且除其他外还采用了T的通用值。
class TVCDataSource_List<T: Managed, etc...>
Run Code Online (Sandbox Code Playgroud)
该通用TVC包括一个词典,该词典旨在容纳TVC的部分标题的较长“替代”名称的列表。
var dictionarySectionData: [String: String] = [:]
Run Code Online (Sandbox Code Playgroud)
我选择以这种方式对TVC进行编程,因为String
在数据模型属性(节标识符)中以短的两个字符保存名称的引用比以长的名称保存引用更有效String
。
我曾尝试在代码中的许多不同位置填充此词典,其中大多数都可以工作,但都具有相同的结果,特别是:
print(dictionarySectionData.description)
控制台会按预期打印出正确填充的字典;p dictionarySectionData
(或po
)询问LLDB print
,产生在该问题开始时详细说明的“完全错误消息”;我做了一些简单的研究:
看来我可能有:
坦率地说,我都不了解,也不了解我对编译器和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
}
}
Run Code Online (Sandbox Code Playgroud)
导致错误消息的代码有两个...
A.如上 func createDictionaryOfSectionHeaderText()
let stringSortOrder = String(type.sortOrder)
let formatSortOrder = String(format: "%02d", stringSortOrder)
Run Code Online (Sandbox Code Playgroud)
...正在以“%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"
Run Code Online (Sandbox Code Playgroud)
...经过进一步思考之后,当显式展开Optional时(如Optional为nil时),这完全符合预期!
因此,当我stringHeaderText
通过移除指令来显式地解开设置器以将其更改为,而在nil时提供默认值时,我的编程问题就消失了。
stringHeaderText = dictionarySectionData[stringSectionName] ?? "ERROR"
Run Code Online (Sandbox Code Playgroud)
如果/我更了解这一点,我什至可以提供答案。
归档时间: |
|
查看次数: |
1172 次 |
最近记录: |