这是我保存数据的方式
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。如果我从模拟器中删除该应用程序,它会加载正确的主题。但是,如果我更改它并再次运行它……什么也没有。有什么想法吗?
最佳答案
您不需要使用 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)")
}
保存后,查看它是否具有您要查找的新值。
关于ios - Swift - 将 Int 保存到核心数据只能工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29620262/