[英]Is it safe, to modify the CoreData generated NSManagedObject properties from Int32 to Int?
[英]Update CoreData attribute of type Int32
我想要获取核心数据属性的值,并且在获取此对象/值之后,我想对其进行更新。 这是我的代码:
var numberOfChanges:Int32?
numberOfChanges = theme.valueForKey("numberThemeChanged") as Int32
var newValueThemeChanges:Int32?
newValueThemeChanges = numberOfChanges+1
theme.setValue(newValueThemeChanges, forKey: "numberThemeChanged")
我收到以下错误:
Type 'Int32' does not conform to protocol 'AnyObject'
: numberOfChanges = theme.valueForKey("numberThemeChanged") as Int32
。 'Int32' is not identical to 'AnyObject'
: theme.setValue(newValueThemeChanges, forKey: "numberThemeChanged")
您知道我该怎么做/我的代码有什么问题吗? 感谢您的回答!
键值编码方法
func valueForKey(key: String) -> AnyObject?
func setValue(value: AnyObject?, forKey key: String)
使用AnyObject
类型的AnyObject
,对于整数属性,这些是NSNumber
实例。
在Int
和NSNumber
之间存在自动桥接,但在Int32
和NSNumber
之间没有自动桥接(这与在Core Data模型检查器中将属性定义为“ Integer 32”这一事实无关)。
您有几种选择:
只需使用Int
类型的变量:
var numChanges = theme.valueForKey("numberThemeChanged") as Int numChanges++ theme.setValue(numChanges, forKey: "numberThemeChanged")
使用Int32
并明确地与NSNumber
转换:
var numberOfChanges = (theme.valueForKey("numberThemeChanged") as NSNumber).intValue // Int32 numberOfChanges++ theme.setValue(NSNumber(int: numberOfChanges), forKey: "numberThemeChanged")
使用Xcode->编辑器->创建NSManagedObject子类...,然后选中“对原始数据类型使用标量属性”选项。 这将为您提供具有属性的托管对象子类
@NSManaged var numberThemeChanged: Int32
并且您可以在没有键值编码的情况下访问属性:
var numberOfChanges = theme.numberThemeChanged numberOfChanges++ theme.numberThemeChanged = numberOfChanges
这是完整的“创建或更新”示例:
var theme : Entity!
let request = NSFetchRequest(entityName: "Entity")
var error : NSError?
if let result = context.executeFetchRequest(request, error: &error) as [Entity]? {
if result.count > 0 {
// (At least) one object found, set `theme` to the first one:
theme = result.first!
} else {
// No object found, create a new one:
theme = NSEntityDescription.insertNewObjectForEntityForName("Entity", inManagedObjectContext: context) as Entity
// Set an initial value:
theme.setValue(0, forKey: "numberThemeChanged")
}
} else {
println("Fetch failed: \(error?.localizedDescription)")
}
// Get value and update value:
var numChanges = theme.valueForKey("numberThemeChanged") as Int
numChanges++
theme.setValue(numChanges, forKey: "numberThemeChanged")
// Save context:
if !context.save(&error) {
println("Save failed: \(error?.localizedDescription)")
}
println(numChanges)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.