Сообщения об ошибках NSCoding с использованием NSKeyedUnarchiver.unarchivedObject (ofClass: from :) - PullRequest
0 голосов
/ 13 апреля 2020

Я получаю желтое предупреждающее сообщение о времени кода в XCode, которое говорит:

'unarchiveObject (with :)' устарел в iOS 12.0: используйте + unarchivedObjectOfClass: fromData: error: вместо:

... когда я использую следующий код:

let oldUbiquityIdentityToken = NSKeyedUnarchiver
    .unarchiveObject(with: oldDataUbiquityIdentityToken!)

Когда я перехожу на unarchivedObject (ofClass: from :), я получаю 2 красных кодовых сообщения об ошибках, прежде чем я даже заполните аргументы:

«NSCoding» не может использоваться в качестве типа, соответствующего протоколу «NSCoding», поскольку «NSCoding» имеет следующие требования: c

Stati c Метод 'unarchivedObject (ofClass: from :)' требует, чтобы 'NSCoding' наследовал от 'NSObject'

Почему я получаю эти сообщения об ошибках?

Я изменяю код на:

let defaultFileManager: FileManager = FileManager.default
let standardUserDefaults = UserDefaults.standard

let ubiquityIdentityToken = defaultFileManager.ubiquityIdentityToken

let oldDataUbiquityIdentityToken = standardUserDefaults.data(forKey: UserDefaultsKeys.ubiquityIdentityToken)

do {

    let dataUbiquityIdentityToken: Data = try NSKeyedArchiver.archivedData(withRootObject: ubiquityIdentityToken!, requiringSecureCoding: false) // error messages appear here
    standardUserDefaults.set(dataUbiquityIdentityToken, forKey: UserDefaultsKeys.ubiquityIdentityToken)

    let oldUbiquityIdentityToken = try NSKeyedUnarchiver.unarchivedObject(ofClass: (NSCoding & NSCopying & NSObjectProtocol).self, from: oldDataUbiquityIdentityToken!)

} catch {

    print(error)

}

Вот красные ошибки времени кода, которые появляются в строке, которую я отмечаю комментариями в коде:

«NSCoding & NSCopying & NSObjectProtocol» не может использоваться как тип, соответствующий протоколу «NSCoding», потому что «NSCoding» имеет значение c требования

Stati c метод 'unarchivedObject (ofClass: from :)' требует, чтобы 'NSCoding & NSCopying & NSObjectProtocol' наследовал от 'NSObject'

Я получил аргумент, который я поставил для параметра 'forClass' из объявления FileManager.ubiquityIdentityToken в документации Apple , в которой говорится:

@ NSCopying var ubiquityIdentityToken: (NSCoding & NSCopying & NSObjectProtocol)? {get}

Вначале меня оттолкнул тот факт, что ошибки появляются еще до того, как я вставлю аргументы в заполнители.

...