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.
一般来说,我会建议将复杂的行分解成单独的行,每行一个操作。在调试过程中更容易发现问题,还可以让您对代码添加一些检查。
编程相对较新,我了解可选绑定并正在尝试安全地解包 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.
一般来说,我会建议将复杂的行分解成单独的行,每行一个操作。在调试过程中更容易发现问题,还可以让您对代码添加一些检查。