Невозможно вызвать unarchiveObject со списком аргументов типа (ofClasses: [NSObject.Type], from: Data) » - PullRequest
0 голосов
/ 18 июня 2020

Согласно ответу Вадиана Как NSKeyedUnarchiver.unarchiveObject для преобразования устаревшего NSKeyedUnarchiver.unarchiveObject для работы в Swift 5 / iOS 12 +

Мне удалось преобразовать архивную часть для работы, но я все еще не могу исправить разархивированную часть, вот мой код:

override func viewDidDisappear(_ animated: Bool)
{
    super.viewDidDisappear(animated)
    guard let packs = MGLOfflineStorage.shared.packs else { return }
    for pack in packs
    {
        do
        {
            let userInfo = try? NSKeyedUnarchiver.unarchiveObject(ofClasses: [NSObject.self], from: pack.context) as? [String: String]
            print("Suspending download of offline pack: “\(userInfo["name"] ?? "unknown")”")
        }
        catch
        {
            print("viewDidDisappear: KeyedUnarchiver Error")
        }
        pack.suspend()
    }
}

, который дает мне ошибку:

Невозможно вызвать unarchiveObject со списком аргументов типа '(ofClasses: [NSObject.Type], from: Data)'

А это оригинал iOS 12- Код:

override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)

// When leaving this view controller, suspend offline downloads.
guard let packs = MGLOfflineStorage.shared.packs else { return }
for pack in packs {
if let userInfo = NSKeyedUnarchiver.unarchiveObject(with: pack.context) as? [String: String] {
print("Suspending download of offline pack: “\(userInfo["name"] ?? "unknown")”")
}
pack.suspend()
}
}

1 Ответ

0 голосов
/ 09 июля 2020

Попробуйте сделать ниже:

let userInfo = try? NSKeyedUnarchiver.unarchiveObject(ofClasses: [NSObject.self.classForKeyedUnarchiver()], from: pack.context) as? [String: String]  

Однако в целях - c ниже будет работать:

NSSet *allowedClasses = [NSSet setWithObjects:[NSArray class],[NSMutableDictionary class], nil];
NSData *eObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"Key"];
NSArray *dUuidList = [NSKeyedUnarchiver unarchivedObjectOfClasses:allowedClasses fromData:eObject error:&error];
...