ios - CoreData - 存储一个在点击按钮时更新的整数

标签 ios swift core-data int

我是 CoreData 的新手。我构建了一个非常简单的计数器界面,每次点击 View 时数字都会增加 1。非常简单。需要实现 CoreData,以便下次打开时该数字仍然存在。

这是我的代码

类级属性

var timer = Int()
var name = Int()
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

viewDidLoad

override func viewDidLoad() {
    super.viewDidLoad()
    let context: NSManagedObjectContext = appDel.managedObjectContext
    do {
        let request = NSFetchRequest(entityName: "Model")
        let results = try context.executeFetchRequest(request)

        for item in results{
            let name = item.valueForKey("counter") as! Int
            print("The counter # saved in Core Data is: \(name)")
            counterOutlet.text = "\(name)"

            // Updated
            if name > timer {
                 timer = name
            }
        }

    }
    catch {
        print("Error retrieving from Core Data.")
    }
}

View Tapped(增加计数器,并保存到 CD)

@IBAction func tapGestureRecognizerTapped(sender: UITapGestureRecognizer) {
    timer += 1
    print(timer)
    counterOutlet.text = "\(timer)"

    let context: NSManagedObjectContext = appDel.managedObjectContext

    // Add stuff to CD
    let mySavedCounter = NSEntityDescription.insertNewObjectForEntityForName("Model", inManagedObjectContext: context)
    mySavedCounter.setValue(timer, forKey: "counter")


    // Add the info to the entity!
    do {
        try context.save()
    }
    catch {
        print("Error saving to Core Data.")
    }
}

我的数据模型 xcdatamodel

当我第一次加载应用程序时,计数器为 0(应该是这样。)我可以点击 View 以将计数器递增 1。工作正常。

当我用力关闭该应用程序时,我会重新打开它以查看我离开时的值仍然存在! (太棒了!!)控制台日志显示如下:(我一到 15 就关闭了应用程序。)

The counter # saved in Core Data is: 1
The counter # saved in Core Data is: 2
The counter # saved in Core Data is: 3
The counter # saved in Core Data is: 4
The counter # saved in Core Data is: 5
The counter # saved in Core Data is: 6
The counter # saved in Core Data is: 7
The counter # saved in Core Data is: 8
The counter # saved in Core Data is: 9
The counter # saved in Core Data is: 10
The counter # saved in Core Data is: 11
The counter # saved in Core Data is: 12
The counter # saved in Core Data is: 13
The counter # saved in Core Data is: 14
The counter # saved in Core Data is: 15

现在我需要调试的问题:

一旦我点击 View ,计数器就会重置为 0,然后从那里递增。没有从 15 开始递增,这是应该的!

我如何修复此错误以使计数器递增到已保存的数字(在本例中为 15)。此外,我创建了一个 NSManagedObject 子类,但似乎没有使用它。上面的代码是使用几个 youtube 教程创建的。这段代码可以通过使用子类来优化吗?每次点击 View 时都将此计数器保存到 CD 是一种不好的做法吗?

最佳答案

在 viewDidLoad 中,您将 counterOutlet.text 设置为名称。 您还必须将计时器设置为名称。 viewDidLoad 中的更新代码如下所示:

override func viewDidLoad() {
    super.viewDidLoad()
    let context: NSManagedObjectContext = appDel.managedObjectContext
    do {
        let request = NSFetchRequest(entityName: "Model")
        let results = try context.executeFetchRequest(request)

    for item in results{
        let name = item.valueForKey("counter") as! Int
        print("The counter # saved in Core Data is: \(name)")
        counterOutlet.text = "\(name)"
        timer = name
    }

}
catch {
    print("Error retrieving from Core Data.")
}
}

关于ios - CoreData - 存储一个在点击按钮时更新的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37309108/

相关文章:

ios - 从函数的返回类型推断类型为泛型

ios - UIImageView 框架没有按预期进行动画处理(大小和原点)

ios - 与 CoreData : how to? 进行乘法(聚合)

ios - 是否可以确定是否会捕获 Objective-C 异常?

ios - 模拟器完整 Xcode 安装的替代方案

ios - 如何打乱 INSPhotoViewable(自定义)数组?

swift - tableView.reloadData() 导致应用程序崩溃

objective-c - CoreData逆向问题

ios - 从 objective-c 调用 swift 类(派生自 NSObject 类)init

ios - 在 Storyboard 上使用内置的 UITabBarItem 图像