2017-05-19 17 views
-1

coreDataから配列xputt2をロードしようとすると、このエラーが発生します。問題のある行を削除すると、データは完全に印刷されますが、行を戻すと配列にロードされません。誰かが私が間違っていることを知っていますか?ここにコードがあります。xcode。 swift3。 coredata。致命的なエラー:インデックスが範囲外です

do { 
     putt2Array = try managedObjectContext.fetch(fetchRequest) 
     print ("results count is", putt2Array.count) 


     var i=0 
      for record in putt2Array { 
       print(record.value(forKeyPath: "missed")! as! Double) 
       xputt2[i] = record.value(forKeyPath: "missed")! as! Double 
       i += 1 
      } 

    } catch let error as NSError{ 
     print("Could not fetch data. \(error), \(error.userInfo)") 
    } 

} 

答えて

0

エラーは、インデックスが範囲外であり、まだ存在しないインデックスで配列にキー入力しているという問題を説明しています。あなたがi = 0とインクリメントi削除することができるはずです

xputt2.append(record.value(forKeyPath: "missed")! as! Double) 

xputt2[i] = record.value(forKeyPath: "missed")! as! Double 

を切り替えてみてください。別のノートで、私は強制的に削除推薦アンラップ:

for record in putt2Array { 
    if let value = record.value(forKeyPath: "missed") as? Double { 
     xputt2.append(value) 
    } 
    } 
+0

ありがとう:

代わりに、あなただけの既存の配列を変換しているので、あなたは、単一の行でそれを行うにはmapメソッドを使用することができます。私はそれが何か非常にシンプルでなければならないことを知っていたが、間違った場所を探していた! – DavidGreen

+0

うれしい私は助けることができました! –

0

配列のインデックスは唯一限り、現時点でのエレメント数となります。 xputt2[i]を使用すると、すでに存在する要素をに置き換えますが、新しい要素を追加することはできません。最後に追加する場合はxputt2.append、配列の特定の場所に配置する場合はxputt2.insertのいずれかを使用できます。完全に問題を解決し、本当に便利なの助けを

xputt2 = putt2array.map{ $0.value(forKeyPath: "missed")! as! Double } 
関連する問題