Swift Optional Unwrapped仍然崩溃

时间:2015-07-06 00:41:06

标签: ios swift debugging nsdictionary optional

相对较新的编程,我理解可选绑定并且我试图安全地解包dictTemp可选 - 我的理解是如果sortedResults.objectAtIndex没有值它应该只返回nil!相反,它正在崩溃应用程序。可选绑定意味着保护应用程序不会崩溃所以我可能误解了如何解包选项!

基本上我遇到的崩溃有时sortResults字典是空的,或者不包含足够的条目来循环正确的次数。我希望它返回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切片[758:126835] *因未捕获的异常终止应用&#39; NSRangeException&#39;,原因:&#39; * - [__ NSArrayI objectAtIndex :]:索引0超出空数组的界限&#39;

1 个答案:

答案 0 :(得分:1)

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

一般来说,我建议将复杂的行分解为单独的行,每行一行。在调试过程中发现问题会更容易,它还允许您在代码中添加一些检查。