我有一个核心数据模型,我添加了一个名为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)")
}
}
我需要获取的结果只是一个简单的整数,我无法找到核心数据的方法。任何人都知道广告/或我做错了什么?
答案 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是否相同。