3
我試圖在應用內購買,並且我正在跟蹤用戶通過NSUserDefaults
購買了哪些購買。我有一個函數設置每次購買的價值,但是當它運行時,我得到一個錯誤,說我正在改變購買價值的字典,即使字典聲明爲var
而不是let
,並且是NSMutableDictionary
。有時它確實有效,但大部分時間沒有。我收到了一些關於用let
而不是var
聲明我的變量的警告,但我忽略它們以使我的變量具有最大的可變性。爲什麼這不起作用?Swift可變字典被視爲不可變
我得到的錯誤是:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
代碼:
static func setPurchased(purchase:PurchaseID, value:Bool)
{
let defaults = NSUserDefaults.standardUserDefaults()
if (defaults.objectForKey(PURCHASES_KEY) == nil)
{
initializePurchases() // go set some initial values
}
if var purchases = (defaults.objectForKey(PURCHASES_KEY) as? NSMutableDictionary) // WARNING: should be declared with let because not mutated
{
print("setting purchase \(purchase.id()) to \(value)")
var key = purchase.id() // WARNING: should be declared with let because not mutated
purchases[key] = value // CRASH HERE
defaults.setObject(purchases, forKey:PURCHASES_KEY)
defaults.synchronize()
}
}
@ozgur由於我設置了一個鍵值對,它必須是'NSMutableDictionary'類型。就我所知,常規的舊AnyObject類型不會讓我這樣做。 – Aderis
@ozgur讓你的評論一個答案。它似乎有效,但我不知道爲什麼。 – Aderis