2017-03-02 27 views
1

私はオブジェクトをコアデータに保存しました。これらのオブジェクトを辞書として取得する方法を探していますSwiftで辞書にコアデータオブジェクトを取り込む方法は?

ここで私のコードの例は、セクションがコアデータオブジェクトの配列。私は私のコードを実行しようとしていた場合

private var companies = Dictionary<String, Array<Company>>() 
private var sections: [String] = ["Pending", "Active", "Pending"] 

override func viewWillAppear(_ animated: Bool) { 
    let fetchRequest : NSFetchRequest<Company> = Company.fetchRequest() 
      let moc = DatabaseController.getContext() 
      do { 
       let request = try moc.fetch(fetchRequest) 
       for case let (index, object) in request.enumerated() { 
        companies[sections[index]]!.append(object) 
       } 
      } catch let error as NSError { 
      print("Could not fetch. \(error), \(error.userInfo)") 
     }} 

、私はエラーを持っている:

enter image description here

fatal error: unexpectedly found nil while unwrapping an Optional value

誰もがその問題で私を助けてもらえますか?

+1

フェッチされたオブジェクトは、フェッチ要求に応じて、** [** NSManagedObject]または[[String:Any]]のいずれかの**配列**として常に返されます。 – vadian

答えて

1

このエラーメッセージは、値を持たないオプションのアンラッピングを強制していることを意味します。言い換えれば、あなたがしてはならないところの!を使用しています。 (あなたは、基本的には)力アンラップ演算子(!を使用しないでください。)

あなたがそれを行う場所のはラインを見てみましょう:私たちは、このダウンを破ると推論された型を追加した場合

companies[sections[index]]!.append(object) 

は、我々が持っている:

let section: String? = sections[index] 
let companyArray: Array<Company> = companies[section]! 

あなたはcompaniesが空から始まりのでクラッシュ、その配列のいずれかがnilが返されますために求めています。 (実際には、あなたのコードがどのようにコンパイルされているのか分かりません。オプションで辞書にサブスクライブできないためです)。セクションを検索するためにフェッチされた配列のインデックス。 3社以上の企業がいると、それは失敗に終わります。

は、私はあなたのような何かをしたい疑い:statusは「アクティブ」、「保留中」などStringを返しCompanyに発明したプロパティがある

for let company in result { 
    if var companyArray = companies[company.status] { 
     companyArray.append(company) 
    } else { 
     companies[company.status] = [company] 
    } 
} 

+0

コードを使用しようとしましたが、もう別の問題があります。だから、私はセクションごとに1社(「アクティブ」と「保留中」)しか保存できません。セクションの複数の企業を持つことは可能ですか?辞書を作成する私の主な目的は、セクションでtableViewを埋めることです。 @dave –

0

私は解決策を見つけましたが、NSFetchResultControllerを使用して、TableViewで異なるセクションでデータを表示する必要があります。

関連する問題