Setup: Xcode version: 7.1 Beta,
Firmware: iOS 9,
Я пытаюсь получить доступ к значению из Core Data, чтобы получить общую сумму приобретенного продукта. Я проверил на вопрос о том же, но в Obj C. CoreData детали:iOS Swift Суммирование значений атрибута CoreData
Entity: Корзина
Атрибуты: Fname (String), fCost (Integer 16), fQuantity (Integer 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;
})]
Я использую cellView для отображения основных данных и выполнения общего.
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, но я вообще не мог работать с ней.
Прошу прощения, я просто проясню. Я хочу получить grandTotal, который будет представлять собой сумму всех fQuantity * fCost. Для ex: fName: Milk, fQuantity: 2, fCost: 30. fName: Butter, fQuantity: 1, fCost = 60. Поэтому я хочу получить (2 * 30) + (1 * 60) = 160 -> grandTotal. Ваше решение работает, но оно дает мне fCost (30) Milk + fCost (60) Butter = 90. Это может быть легко, но много чего, и я думаю, что я просто делаю это слишком сложным. Можете ли вы обновить свое решение? Спасибо –
Извинения, я упустил количество. Я думаю, что ты уже об этом подумал, простой цикл будет достаточным, я обновлю свой ответ ... –
Хорошо, я получил его работу. Я удалил свой комментарий, поскольку это не имело смысла. Ваш ответ работает. Просто нужно было добавить valueForKey. Примите изменения, чтобы я мог принять ответ. Я недостаточно зрелый в программировании. Спасибо, что поняли. –