Swift - 将Int保存到Core数据只能运行一次

时间:2015-04-14 06:09:00

标签: ios swift core-data

以下是我保存数据的方法

    let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let managedContext = appDelegate.managedObjectContext!
    let entity =  NSEntityDescription.entityForName("Theme", inManagedObjectContext: managedContext)
    let themeObj = NSManagedObject(entity: entity!, insertIntoManagedObjectContext:managedContext)

    themeObj.setValue(num, forKey: "themeNumber")

    var error: NSError?
    if !managedContext.save(&error)
    {
        println("Could not save \(error), \(error?.userInfo)")
    }

然后加载

    let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let managedContext = appDelegate.managedObjectContext!

    let fetchRequest = NSFetchRequest(entityName:"Theme")
    var resultArr = [NSManagedObject]()
    var error: NSError?

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

    if let results = fetchedResults
    {
        resultArr = results
    }
    else
    {
        println("Could not fetch \(error), \(error!.userInfo)")
    }


    theme = resultArr[0].valueForKey("themeNumber") as Int

我的数据模型只是具有一个属性的实体主题,themeNumber是一个整数16.如果我从模拟器中删除了应用程序,它会加载正确的主题。但是,如果我改变它并再次运行它......没有。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您不需要使用setValue。通常你会做这样的事情:

themeObj.themeNumber = num

因此,要解决您的问题,您需要实际更新核心数据对象。我刚刚意识到您可能没有通过属性设置themeNumber,因为您没有为您的实体设置NSManagedObject子类。我会写一下尝试编写修复程序,了解如何设置它。

theme = resultArr[0] as NSManagedObject
theme.setValue(num, forKey: "themeNumber")
if !managedContext.save(&error)
{
    println("Could not save \(error), \(error?.userInfo)")
}

保存后,查看它是否具有您要查找的新值。