更新Int32类型的CoreData属性
我想得到一个核心数据属性的值,在获得这个对象/值之后我想更新它。 这是我的代码:
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'
此行代码中的Type 'Int32' does not conform to protocol 'AnyObject'
:numberOfChanges = theme.valueForKey("numberThemeChanged") as Int32
。 -
'Int32' is not identical to 'AnyObject'
此代码行中的'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 – > Editor – > Create 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)
- libobjc.A.dylib objc_msgSend – React Native iOS – 我如何阅读这个崩溃报告?
- GLKBaseEffect prepareToDraw泄漏
- 如何重置ALAuthorizationStatusNotDetermined在实际设备上的照片权限
- 为什么Objective-C / Swift中的asynchronousnetworkingtesting困难?
- 如果使用UISearchController重新加载数据,导航栏将消失
- iPad上的CSS灵活盒子布局
- 如何在应用程序开始运行代码之前运行迁移?
- iOS(Apple):应用程序是否有任何方法要求操作系统阻止该应用程序中的设备?
- 如何在不同的时间每天重复本地通知