2015-10-08 40 views
0
Setup: Xcode version: 7.1 Beta, 
Firmware: iOS 9, 

我試圖從核心數據訪問一個值來獲得購買產品的總計。我已經檢查在同一個問題,但它是在的OBJ C. CoreData細節:iOS Swift總結CoreData屬性值

實體:車

屬性:FNAME(字符串),fCost(整數16),fQuantity(整數16)

檢索代碼如下:

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
let managedContext : NSManagedObjectContext = appDelegate.managedObjectContext! 
let fetchRequest = NSFetchRequest(entityName: "Cart") 
fetchRequest.returnsObjectsAsFaults = false 
do { 
    let results = try managedContext.executeFetchRequest(fetchRequest) 
    print("===\(results)") 

} catch let error as NSError { 
    print(error) 
} 

打印(結果)輸出是如下:

[<Tif.Cart: 0x7f8d19e60d00> (entity: Cart; id: 0xd000000000240000 <x-coredata://5D617B2C-35BC-43B4-BEC1-40AABA96C558/Cart/p9> ; data: { 
    fCost = 30; 
    fName = "Milk"; 
    fQuantity = 2; 
}), <Tif.Cart: 0x7f8d19e7cd80> (entity: Cart; id: 0xd000000000280000 <x-coredata://5D617B2C-35BC-43B4-BEC1-40AABA96C558/Cart/p10> ; data: { 
    fCost = 60; 
    fName = "Butter"; 
    fQuantity = 1; 
})] 

我正在使用tableView單元顯示核心數據並執行總計。

var cart = [NSManagedObject]() 
let order = cart[indexPath.row] 
cell.fNLabel.text = order.valueForKey("fName")! as? String 
cell.fCLabel.text = "Rs \(order.valueForKey("fCost") as! NSNumber)" 
cell.fQLabel.text = "\(order.valueForKey("fQuantity") as! NSNumber)" 
let fQ = order.valueForKey("fQuantity") as! Int 
let fC = order.valueForKey("fCost") as! Int 
let total = fQ * fC 
totalArray.append(total) 
grandTotal = totalArray.sum() // sum() is an extension that calculates the sum of integer values 
print(grandTotal) 
grandTotalLabel.text = "\(grandTotal)" 
cell.fTLabel.text = "Rs \(total)" 

我得到grandTotal,但每次我拉表時,值都被添加到最後一個值。

我也讀過關於使用NSFetchRequestController選項,但我根本無法使用它。

回答

1

看起來您正在計算tableView:cellForRowAtIndexPath:方法中的總計。這絕對不是正確的地方,因爲它只會計算可見單元格的總計。

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
let managedContext : NSManagedObjectContext = appDelegate.managedObjectContext! 
let fetchRequest = NSFetchRequest(entityName: "Cart") 
fetchRequest.returnsObjectsAsFaults = false 
do { 
    let results = try managedContext.executeFetchRequest(fetchRequest) 
    print("===\(results)") 

    // Calculate the grand total... 
    var grandTotal = 0 
    for order in results { 
     let fQ = order.valueForKey("fQuantity") as! Int 
     let fC = order.valueForKey("fCost") as! Int 
     grandTotal += fC * fQ 
    } 
    print("Grand total = \(grandTotal)") 

} catch let error as NSError { 
    print(error) 
} 
+0

對不起,我只是說清楚。我想獲得所有fQuantity * fCost總和的grandTotal。例如:fName:Milk,fQuantity:2,fCost:30. fName:Butter,fQuantity:1,fCost = 60.所以我想得到(2 * 30)+(1 * 60)= 160 - > grandTotal。你的解決方案正在發揮作用,但它給我的成本(30)牛奶+成本(60)黃油= 90.這可能很容易,但嘗試了很多東西,我認爲我只是使它太複雜。你能更新你的解決方案嗎?謝謝 –

+0

道歉,我忽略了數量。我想你是在想這個,一個簡單的循環就足夠了,我會更新我的答案... –

+1

好吧,我得到它的工作。我刪除了我的評論,因爲它沒有意義。你的答案有效。只需添加valueForKey。請接受編輯,以便我可以接受答案。我在編程方面還不夠成熟。感謝您的理解。 –