2015-07-06 47 views
-1

相對較新的編程,我理解可選綁定,並試圖安全地解開dictTemp可選 - 我的理解是,如果sortedResults.objectAtIndex沒有值,它應該只返回零!相反,它正在崩潰應用程序。可選綁定是爲了防止應用程序崩潰,所以也許我誤解了如何解開optionals!Swift可選解開仍然崩潰

基本上我得到的崩潰有時候是sortedResults字典是空的,或者沒有足夠的條目來循環正確的次數。我希望它返回零而不是崩潰。

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年7月5日18:18:38.636切片[758:126835] *終止應用程序由於未捕獲的異常 'NSRangeException',原因:「* - [__ NSArrayI objectAtIndex :]:索引0超出空數組的邊界'

+0

你在哪裏/如何聲明「sortedResults」? –

+1

在問題中添加了代碼。爲了讓所有人都頭疼,儘管我只是回到了我認爲上下文有必要的地步! – Chris

+0

您可能也想從崩潰發佈控制檯輸出。這會給讀者帶來更多的色彩:發生了什麼。 – Adrian

回答

1

錯誤消息現在說,您有一個空數組,並嘗試訪問位置爲0的元素,這是超出範圍。這種情況下的崩潰是expected

一般來說,我會建議將複雜的行分成一行,每行一行。在調試過程中發現問題會更容易,並且還允許您向代碼添加一些檢查。

+0

好點,但我仍然在崩潰!我會將新if if語句添加到原始問題 – Chris

+0

是的,但問題中引用的錯誤與數組相關,而不是此字典。 – Rob

+0

@Rob我很確定錯誤是sortedResults.objectAtIndex(j)沒有值。試圖訪問的數組(sortedResults)中沒有任何條目。我的問題是,如果它沒有價值,爲什麼會崩潰?它不應該只是返回零嗎? – Chris