如何使用swift3从MutableArray中获取排序的Dictionary

时间:2016-11-10 10:50:23

标签: ios uitableview swift3

我设法从我的数据库创建一个字典,以便在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
    }

}

2 个答案:

答案 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)

你需要检查两件事

  1. 首先检查marrCrimesNames!= nil,发出一份保护声明来检查nil
  2. marrCrimesNames有什么类型的对象,你确定它有CrimesInfo对象吗?
  3. 要知道什么类型的对象,marrCrimesNames只保留第0个索引的引用,并在左侧调试面板中检查degugger中的对象类型。