NSManagedObject 保存在核心数据中但属性错误
Posted
技术标签:
【中文标题】NSManagedObject 保存在核心数据中但属性错误【英文标题】:NSManagedObject saved in core data but with the wrong attributes 【发布时间】:2015-02-13 11:57:22 【问题描述】:我的 NSManagedObject 子类和核心数据有点问题。
所以,我创建了一个 NSManagedObject 的子类:
import Foundation
import CoreData
@objc(Alarm)
class Alarm: NSManagedObject
@NSManaged var name: String
override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?)
super.init(entity: entity, insertIntoManagedObjectContext: context)
name = "Unnamed"
我创建了一个 AlarmsManager 类来与核心数据建立链接
import UIKit
import CoreData
var alarmsMgr: AlarmsManager = AlarmsManager()
class AlarmsManager: NSObject
let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedContext: NSManagedObjectContext
let entityDescription: NSEntityDescription
override init()
managedContext = appDelegate.managedObjectContext!
entityDescription = NSEntityDescription.entityForName("Alarm", inManagedObjectContext: managedContext)!
func createAlarm() -> Alarm
var newAlarm: Alarm = Alarm(entity: entityDescription, insertIntoManagedObjectContext: managedContext)
return newAlarm
func addAlarm(newAlarm: Alarm) -> Void
var error: NSError?
println(newAlarm.name) // Display the good name
if !managedContext.save(&error)
println("Error : \(error)")
println("Done...")
另外,这是我加载闹钟的方式:
func loadAlarms()
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName:"Alarm")
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]?
if let results = fetchedResults
alarmsArr = results
else
println("Could not fetch \(error), \(error!.userInfo)")
所以:
1) 我使用 createAlarm
创建了一个新警报2) 我使用类似 newAlarm.name = "New name"
之类的名称填写闹钟名称3) 我尝试使用 AlarmManager 中的 addAlarm 将此对象保存在我的核心数据中
问题是:它确实将对象保存在核心数据中,但是当我尝试显示我的警报时,名称仍然是“未命名”
提前感谢您的帮助
【问题讨论】:
如果本地数据库中的属性正确,您可以检查您的模拟器(使用 sqlite 查看器)吗?并尝试获取警报数量 - 警报计数是否正确? 您好,如果属性正确,最好查看数据库,我搜索了如何执行此操作,发现我必须转到 ~/Library/Application Support/iPhone Simulator/7.1/申请但我找不到我的申请 转到 ~/Library/Developer/CoreSimulator/Devices/... 您使用的是 ios 8 吗? 谢谢你的路径,我找到了好文件并用sqlitebrowser打开它。有很多对象,当我刚刚添加警报时名称很好,但是当我停止应用程序时,打开它并添加另一个警报,名称更改为“未命名”。 (编辑:是的,我使用 iOS8) 【参考方案1】:我在显示AlarmsListView的函数中添加了NSManagedObjectContext回滚函数,我的问题就解决了。
【讨论】:
以上是关于NSManagedObject 保存在核心数据中但属性错误的主要内容,如果未能解决你的问题,请参考以下文章
核心数据:NSManagedObject 何时插入上下文并保存?
核心数据,NSManagedObject 在应用版本之间发生变化