0
public var zonesChangeToken: [CKRecordZone.ID: CKServerChangeToken]? {
        get {
            if(backingPreviousZonesChangeToken == nil) {
                guard let defaults: UserDefaults = UserDefaults(suiteName: CloudKitHandler.APP_GROUP_ID) else { return nil }
                guard let data = defaults.data(forKey: CloudKitHandler.CK_PREVIOUS_ZONES_CHANGE_TOKEN)
                    else { return [CKRecordZone.ID: CKServerChangeToken]() }
                do {
                    let unarchiver: NSKeyedUnarchiver = try NSKeyedUnarchiver(forReadingFrom: data)
                    unarchiver.requiresSecureCoding = true
                    backingPreviousZonesChangeToken = try unarchiver.decodeTopLevelObject() as? [CKRecordZone.ID: CKServerChangeToken]
                } catch { }
            }

            return backingPreviousZonesChangeToken
        }

        set(value) {
            backingPreviousZonesChangeToken = value
            guard let value = value else { return }
            guard let defaults: UserDefaults = UserDefaults(suiteName: CloudKitHandler.APP_GROUP_ID) else { return }
            let archiver: NSKeyedArchiver = NSKeyedArchiver(requiringSecureCoding: true)
            archiver.encode(value)
            archiver.finishEncoding()
            defaults.setValue(archiver.encodedData, forKey: CloudKitHandler.CK_PREVIOUS_ZONES_CHANGE_TOKEN)

        }
    }

ID とトークンの辞書をエンコード/デコードしようとしています。しかし、何らかの理由で、デコードでは常に nil が返されます。

直し方?

4

1 に答える 1