Как выполнять вычисления с помощью Core Data

Я пытаюсь сделать небольшую программу, которая подсчитывает количество нажатий на кнопку. Я использую Core Data для хранения информации. Единственная проблема заключается в том, что я не могу понять, как выполнять вычисления с информацией в основных данных. Если кто-то может сказать мне, как сделать переменную в коде равной значению информации в Core Data, я знаю достаточно. Если есть другой способ вычислений с Core Data, о котором я хотел бы узнать.

import UIKit
import CoreData

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    let appDelegate = UIApplication.shared.delegate as! AppDelegate

    let context = appDelegate.persistentContainer.viewContext



    /*let newUser = NSEntityDescription.insertNewObject(forEntityName: "Data", into: context)

    newUser.setValue(number, forKey: "number")

    do{
        try context.save()
        print("Saved")
    }catch{
        print("Error occured in the saving process.")
    }*/




    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Data")

    request.returnsObjectsAsFaults = false

    do{
        let results = try context.fetch(request)

        if results.count > 0{
            for result in results as! [NSManagedObject]{

                if let number = result.value(forKey: "number") as? Double{
                    print("number is ", number)
                result.setValue(number + 1, forKey: "number")
                        do{
                            try context.save()
                        }catch{

                }
            }
            }
        }
    }catch{
        print("Error with fetching data.")
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

var number = 0.0

}

Ошибка, выдаваемая в строке с nummer = number += 1: невозможно присвоить значение типа '()' типу 'Double'

Я ценю все ваши ответы.


person Jasper IJdema    schedule 20.09.2017    source источник
comment
Настоятельно рекомендуется использовать подкласс NSManagedObject. Если вы хотите выполнять математические операции с Double, вы должны объявить var number = 0.0 литералом с плавающей запятой, потому что литерал 0 объявляет переменную как Int, и — хотя это не обязательно — использовать литералы с плавающей запятой и в других строках, чтобы указать, что вы имеете дело с Doubles. Кстати results.count >= 0 это бред, results всегда 0 и больше. Чтобы проверить, не пуст ли массив, используйте !results.isEmpty   -  person vadian    schedule 20.09.2017


Ответы (1)


Это не имеет ничего общего с Core Data. Эта строка не имеет смысла:

nummer = nummerVar += 1

Оператор += увеличивает nummerVar на месте. Вы назначаете это number, но возвращаемое значение операции += не является Double, поэтому вы не можете назначить его Double.

Я не совсем уверен, что вы имели в виду здесь. Вы могли иметь в виду

nummer = nummerVar + 1

Или, может быть, вы имели в виду

nummerVar += 1
nummer = nummerVar

Любой из них является допустимым кодом, но какой из них вам нужен, зависит от того, что вы пытаетесь сделать.

person Tom Harrington    schedule 20.09.2017
comment
Большое спасибо!!!! Вы совершенно правы. Мне просто пришлось использовать знак + вместо +=. Я отредактирую код на правильный код. - person Jasper IJdema; 20.09.2017