Я получаю желтое предупреждающее сообщение о времени кода в 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}
Вначале меня оттолкнул тот факт, что ошибки появляются еще до того, как я вставлю аргументы в заполнители.