我设法从我的数据库创建一个字典,以便在tableview
中添加部分。
我的函数将数据库导入Array,将Array导入字典(A:Aname1,Aname2,B:Bname1,Bname2 ......)。 当我对字典进行排序时,返回值是[String,[String]]类型,我需要它是[String:[String]],当我不使用排序操作时它会给出这个错误:
线程1:EXC_BAS_INSTRUCTION(代码= EXC_I386_INVOP,子码=为0x0)
在控制台中:
致命错误:在展开Optional值时意外发现nil (LLDB)
我的代码:
class SectionData {
var marrCrimesNames : NSMutableArray!
func getCrimesNames() {
marrCrimesNames = NSMutableArray()
marrCrimesNames = ModelManager.getInstance().getAllCrimesNames()
}
func getSectionsFromData() -> [String: [String]] {
var sectionDictionary = [String: [String]]()
let crime: CrimesInfo = (marrCrimesNames.object(at: 0) as! CrimesInfo) // Thread1:EXC_BAS_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)
_ = crime.Name
var firstLetter: [String] = []
for crime in marrCrimesNames {
firstLetter.append((crime as AnyObject).Name)
}
let characters = Array(Set(firstLetter.flatMap({ $0.characters.first })))
for character in characters.map({ String($0) }) {
sectionDictionary[character] = firstLetter.filter({ $0.hasPrefix(character) })
}
//var sortedSectionDictionary = sectionDictionary.sorted(by: { $0.key < $1.key })
// sort action return [String, [String]]
return sectionDictionary
}
}
答案 0 :(得分:0)
错误是你假设值返回:
let crime: CrimesInfo = (marrCrimesNames.object(at: 0) as! CrimesInfo)
已设置。
错误清楚地表明它未设置并返回nil
。
所以检查一下:
if let crime = marrCrimesNames.object(at: 0) {
// Here you can safely use crime ;)
}
答案 1 :(得分:0)
你需要检查两件事