NSManagedObject保存在核心数据中但具有错误的属性

时间:2015-02-13 11:57:23

标签: ios swift core-data nsmanagedobject

我的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 ="新名称"

填写我的闹钟名称

3)我尝试使用AlarmManager中的 addAlarm 将此对象保存在我的核心数据中

问题是:它确实将对象保存在核心数据中,但当我尝试显示警报时,名称仍然是"未命名"

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我在显示AlarmsListView的函数中添加了NSManagedObjectContext回滚函数,我的问题解决了。