Как да изчисляваме с 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

}

Грешката, която е дадена на реда с число = число += 1: Не може да се присвои стойност от тип „()“ на тип „Двойно“

Оценявам всички ваши отговори.


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)


Това няма нищо общо с основните данни. Този ред няма смисъл:

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