无法从核心数据属性中获取整数

时间:2015-05-08 18:22:14

标签: ios swift core-data

我有一个核心数据模型,我添加了一个名为CurrentLevel的实体和一个名为currentLevel和int16类型的属性。我试图将一个简单的整数保存到它中:

    func saveCurrentLevel(cLevel: Int16){

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

    let managedContext = appDelegate.managedObjectContext!

    let entity =  NSEntityDescription.entityForName("CurrentLevel",
        inManagedObjectContext:
        managedContext)

    let curLevel = NSManagedObject(entity: entity!,
        insertIntoManagedObjectContext:managedContext)

    curLevel.setValue(NSNumber(short: cLevel), forKey: "currentLevel")

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

}

这是我的提取方法

func fetchTheStuff() {

    //1
    let appDelegate =
    UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext!

    //2
    let fetchRequest = NSFetchRequest(entityName:"CurrentLevel")

    //3
    var error: NSError?

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



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

}

我需要获取的结果只是一个简单的整数,我无法找到核心数据的方法。任何人都知道广告/或我做错了什么?

2 个答案:

答案 0 :(得分:3)

executeFetchRequest()返回一个托管对象数组。 你必须得到一个元素(例如第一个),然后检索 “currentLevel”属性的值(NSNumber) 最后提取Int16

if let results = fetchedResults {
    if count(results) > 0 {
        let curLevel = results[0] // NSManagedObject
        if let num = curLevel.valueForKey("currentLevel") as? NSNumber {
            let cLevel = num.shortValue // Int16
            println(cLevel)
        } else {
            println("level not set")
        }
    } else {
        println("no objects found")
    }
} else {
    println("Could not fetch \(error), \(error!.userInfo)")
}

您可以使用setValue/valueForKey()代替键值编码 让Xcode创建NSManagedObject子类。如果你激活 然后,“使用原始数据类型的标量属性”选项 你可以访问它的

@NSManaged var currentValue: Int16

属性直接。

答案 1 :(得分:0)

使用Objective-C,您需要在使用Core Data时将int存储为NSNumber。所以,如果我使用的是int,我会这样做:

coreDataClass.number = [NSNumber numberWithInt:100];

我不确定它与Swift是否相同。