Swift Optional Unwrapped 仍然崩溃

Swift Optional Unwrapped still crashes

编程相对较新,我了解可选绑定并正在尝试安全地解包 dictTemp 可选 - 我的理解是,如果 sortedResults.objectAtIndex 没有价值,它应该只是 return nil!相反,它使应用程序崩溃。可选绑定是为了防止应用崩溃,所以我可能误解了如何解包可选!

基本上,我遇到的崩溃有时是 sortedResults 字典为空,或者没有包含足够的条目来循环正确的次数。我希望它 return nil 而不是崩溃。

    var mainArrOfDict:NSMutableArray = NSMutableArray()

    var descriptor: NSSortDescriptor = NSSortDescriptor(key: "SortingNumber", ascending: false)
    var subDescriptor1: NSSortDescriptor = NSSortDescriptor(key: "TotalCount", ascending: false)
    var subDescriptor2: NSSortDescriptor = NSSortDescriptor(key: "ArrayLength", ascending: true)
    var sortedResults: NSArray = mainArrOfDict.sortedArrayUsingDescriptors([descriptor,subDescriptor1,subDescriptor2])

func SortingArray(sortingArray : NSArray, maxLimit : Int , minLimit : Int) -> NSMutableArray
    var usersSelectedString: String = User.currentUser.getCount() as String
    var usersSelectedInt: Int? = usersSelectedString.toInt()       
    for var j=0 ; j < usersSelectedInt; j++ {

        // ** Crash highlights the line below
        if let dictTemp : NSDictionary = sortedResults.objectAtIndex(j) as? NSDictionary {

            if let strTotalCount : AnyObject  = dictTemp.objectForKey("index") {
                arrFinalArray.addObject(finalArrayToSort.objectAtIndex(Int(strTotalCount as! NSNumber)))

            }
        }
    }

    return arrFinalArray
}

崩溃的控制台日志: 2015-07-05 18:18:38.636 sliced[758:126835] * 由于未捕获的异常 'NSRangeException' 而终止应用程序,原因:'* -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'

错误消息现在表示您有一个空数组并试图访问位置 0 处的元素,该位置超出范围。这种情况下的崩溃是 expected.

一般来说,我会建议将复杂的行分解成单独的行,每行一个操作。在调试过程中更容易发现问题,还可以让您对代码添加一些检查。