簡體   English   中英

更新Int32類型的CoreData屬性

[英]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")

我收到以下錯誤:

  1. 在此代碼行中, Type 'Int32' does not conform to protocol 'AnyObject'numberOfChanges = theme.valueForKey("numberThemeChanged") as Int32
  2. 在以下代碼行中, '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實例。

IntNSNumber之間存在自動橋接,但在Int32NSNumber之間沒有自動橋接(這與在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM