2016-10-31 5 views
0

私は新しいIOS開発者です。 Xcode 8とスウィフト3を使用しています。 Coreデータベースに保存されたデータからpickerViewに値を表示したいとします。私のコード怒鳴るがエラー(致命的なエラー:範囲外のインデックス)はコアデータベースからのPickerViewの値を表示

を私はここにコアデータベースから

var boundName = [String]() 
    var expenses = [NSManagedObject]()// variable to fetch the data from core database 
    var num = 0// variable to hold the count of the fetched data 

をフェッチしたデータを格納する配列を定義pickerView

public func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1; 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

    let request = NSFetchRequest <NSFetchRequestResult> (entityName : "ExpenseBound_Table") 
    request.returnsObjectsAsFaults = false 


    do { 
     expenses = try self.context.fetch(request) as! [NSManagedObject] 
     num = expenses.count 

    } catch { print(error) } 

    return num; 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 


    let request = NSFetchRequest <NSFetchRequestResult> (entityName : "ExpenseBound_Table") 
    request.returnsObjectsAsFaults = false 

    do{ 
    expenses = try self.context.fetch(request) as! [NSManagedObject] 

     if expenses.count > 0 { 


       let person = expenses[row] 
       let boundText = person.value(forKey: "boundName_Expense") as? String 
       boundName [row] = boundText! //error fires here fatal error: Index out of range 




     } 

    } 
    catch{ 
     print ("Fetch Faield") 
    } 
    return boundName[row] 
} 
ための機能です

答えて

0

配列を使用して宣言されています。このように

var boundName = [String]() 

宣言は、SPはありませんあなたは次の行を実行すると、配列のサイズをecifyので、それがクラッシュします:

boundName [row] = boundText! 

策:代わりに

使用append

boundName.append(boundText!)