Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 奇怪的核心数据行为(复制条目)_Ios_Swift_Core Data - Fatal编程技术网

Ios 奇怪的核心数据行为(复制条目)

Ios 奇怪的核心数据行为(复制条目),ios,swift,core-data,Ios,Swift,Core Data,我有一个小游戏,我想存储一个数字,代表用户解锁的最后一级。 所以我有一个类来保存和加载核心数据 首先,我声明了处理核心数据所需的对象(我从教程中获取了它们) 这是我的保存方法 func saveData() { data.setValue(lastUnlockedLevel, forKey: "lastUnlockedLevel") var error: NSError? if !managedContext.save(&erro

我有一个小游戏,我想存储一个数字,代表用户解锁的最后一级。 所以我有一个类来保存和加载核心数据

首先,我声明了处理核心数据所需的对象(我从教程中获取了它们)

这是我的保存方法

    func saveData() {
        data.setValue(lastUnlockedLevel, forKey: "lastUnlockedLevel")

        var error: NSError?
        if !managedContext.save(&error) {
            println("Could not save \(error), \(error?.userInfo)")
        }
    }
这是我的加载方法

func loadData() {
    let fetchRequest = NSFetchRequest(entityName: "Data")
    fetchRequest.returnsObjectsAsFaults = false

    var error: NSError?
    let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]?

    if let results = fetchedResults {
        if results.count == 0 {
            createInitialData()
        } else if results.count > 0 {
            lastUnlockedLevel = results[0].valueForKey("lastUnlockedLevel") as Int
        }
    } else {
        println("Could not fetch \(error), \(error?.userInfo)")
    }
}
我是个新手,所以我可能会弄错。 加载我的应用程序后,我会检查是否存在核心数据。如果不是-我将LastUnlockdlevel变量设置为1。当我解锁一个关卡时,我会增加var并将其保存到应用程序存储中

当我再次加载app one时,我跟踪我的结果数组并看到如下内容:

[<NSManagedObject: 0x14602790> (entity: Data; id: 0x14602650 <x-coredata://B994407F-5A33-446F-BB13-758F1190A45A/Data/p1> ; data: {
lastUnlockedLevel = 2;}),
<NSManagedObject: 0x14607770> (entity: Data; id: 0x14602670 <x-coredata://B994407F-5A33-446F-BB13-758F1190A45A/Data/p3> ; data: {
lastUnlockedLevel = 0;}),
<NSManagedObject: 0x1460ae20> (entity: Data; id: 0x1460ae50 <x-coredata:///Data/t3EEBBE5F-DF13-4C34-AE59-96AEE72DF0A52> ; data: {
lastUnlockedLevel = 0;}), 
<NSManagedObject: 0x14607740> (entity: Data; id: 0x14602660 <x-coredata://B994407F-5A33-446F-BB13-758F1190A45A/Data/p2> ; data: {
lastUnlockedLevel = 0;
[(实体:数据;id:0x14602650;数据:{
LastUnlockdlevel=2;}),
(实体:数据;id:0x14602670;数据:{
LastUnlockdlevel=0;}),
(实体:数据;id:0x1460ae50;数据:{
LastUnlockdlevel=0;}),
(实体:数据;id:0x14602660;数据:{
LastUnlockdlevel=0;
同一数据库字段有多个条目。我知道应该只有一个条目?更令人困惑的是,当我的LastUnlockdlevel为0时,我从不保存数据。 我做错了什么?
})]

我鼓励您使用更简单的解决方案。 使用NSUserDefaults,这个类是专门为这种用途引入的

在代码的全局部分,您可以添加以下内容:

private let lastUnlockedLevelKey = "LastUnlockedLevel"
public var lastUnlockedLevel: Int {
get {
    let userDefaults = NSUserDefaults.standardUserDefaults()
    let theLevel = userDefaults.integerForKey(lastUnlockedLevelKey)

    return theLevel > 0 ? theLevel : 1
}
set {
    let userDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setInteger(newValue, forKey: lastUnlockedLevelKey)
    userDefaults.synchronize()
}
}
例如,您可以将其放在AppDelegate.swift的开头(类定义之外)


而不是在代码中的任何地方,您都可以使用
lastUnlockdlevel
作为正常变量。每次您设置它时,它都将保存在标准用户默认值中。

是否可能重复哪个类声明了
init
方法?
private let lastUnlockedLevelKey = "LastUnlockedLevel"
public var lastUnlockedLevel: Int {
get {
    let userDefaults = NSUserDefaults.standardUserDefaults()
    let theLevel = userDefaults.integerForKey(lastUnlockedLevelKey)

    return theLevel > 0 ? theLevel : 1
}
set {
    let userDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setInteger(newValue, forKey: lastUnlockedLevelKey)
    userDefaults.synchronize()
}
}