2016-12-21 10 views
0

私はtableViewを持っており、そのテーブルビューにはCoredataのデータが取り込まれています。このようにデータは分解されます。CoreData iosのエンティティ内に属性を追加する10

エンティティ - 人

エンティティ - ステートメント の文エンティティはamountOwedという属性を持っており、それが小数型です。

人は多くのステートメントを持つことができますが、各ステートメントは1人の個人に属しています。

ここでは、追加したいデータのパスを示します。人>声明> AmountOwed。

tableView関数には、Personエンティティを表すletがあります。私はamountOwedは、SQL文エンティティ内の各個人の属性をすべて足している行うことができるようにしたいどのよう

print(person.name) // Bob 

のような名前の人物をプリントアウトすることができますので

let person = fetchedResultsController.object(at: indexPath) 

私はその作業を知っていますそれらをセルに表示します。

私は計算されたフェッチの例に従おうとしていますが、私は静かではないようですが、各PersonエンティティにリンクされているStatementsエンティティをターゲットにする方法を理解しています。

let fetchRequest = NSFetchRequest<NSDictionary>(entityName:"statement") 
      fetchRequest.resultType = .dictionaryResultType 

      let sumExpressionDesc = NSExpressionDescription() 
      sumExpressionDesc.name = "sumDeals" 

      let specialCountExp = NSExpression(forKeyPath: #keyPath(Person.statement[indexPath].amountOwed)) 

      sumExpressionDesc.expression = NSExpression(forFunction: "sum:", arguments: [specialCountExp]) 

      sumExpressionDesc.expressionResultsType = .interger32AttributeType 

      fetchRequest.propertiesToFetch = [sumExpressionDesc] 

      do{ 
       let results = try coreDataStack.managedContext.fetch(fetchRequest) 

       let resultDict = results.first! 
       let numDeals = resultDict["sumDeals"] 
       print(numDeals!) 
      } 

      catch let error as NSError{ 
       print("Count not fetched \(error), \(error.userInfo)") 
      } 

Statementエンティティを取得する必要がありますか、またはFetchedREsultsControllerを使用するだけですか?私は私のfetchedResultsControllerを使用する場合ステートメントエンティティへのキーパスはあなたPeople+CoreDataClassアドオンでOKこの

person[indexPath].statement.amountOwed 

答えて

1
不要であるフェッチからすべてのコードを削除します

これは1行で行うことができます。 StatementからPersonから関係がstatementsと呼ばれている場合は、

let amountTotal = newPerson.value(forKeyPath: "[email protected]") as? Int64 

変更あなたのamount attribute--ダブルまたは何のために適切であるものは何でもへInt64から終わりに意気消沈して金額の合計を取得します。

+0

うわー、どのような素晴らしいソリューション、とてもシンプルで清潔。ありがとうございました! – icekomo

0

のように見えるん:

var totalOwed: Float { 
    get { 
     var value: Float = 0 

     if let statements = self.statements.allObjects() as? [Statement] { 
      for s in statements { 
       value = value + s.sum 
      } 
     } 
    return value  
} 
} 

そして、あなたのことが

関連する問題