Я получаю следующее исключение при попытке разархивировать при использовании Swift:NSKeyedUnarchiver не может декодировать объект класса NSKnownKeysDictionary1
Нагрузочного приложение из-за неперехваченное исключение «NSInvalidUnarchiveOperationException», причина: «*** - [NSKeyedUnarchiver decodeObjectForKey:]: невозможно декодировать объект класса (NSKnownKeysDictionary1) для ключа (NS.objects); класс может быть определен в исходном коде или в библиотеке, которая не связана '
Контекст: Я создаю расширение «Share Links». В моем основном приложении (написанном в Objective C) я выписываю массив словарей с информацией о ссылках с помощью MMWormhole.
NSFetchRequest* bookmarkFetch = [NSFetchRequest fetchRequestWithEntityName:@"XX"];
bookmarkFetch.propertiesToFetch = @[
@"name", @"text", @"date", @"url"
];
bookmarkFetch.resultType = NSDictionaryResultType;
NSArray* bookmarks = [moc executeFetchRequest:bookmarkFetch error:NULL];
[wormhole passMessageObject:bookmarks identifier:@"XXX"];
Значения в массиве - это NSStrings и NSDate.
В недрах MMWormhole вы получите:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:messageObject];
messageObject просто массив закладок без промежуточной обработки.
В расширения у меня есть:
let wormhole = MMWormhole(applicationGroupIdentifier: "group.XX", optionalDirectory:nil)
let bookmarks = wormhole.messageWithIdentifier("XXX") as? Array<Dictionary<String,AnyObject>>
messageWithIdentifier: заканчивается вызовом это в конечном счете:
id messageObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Массив записывается в папку приложения группы правильно - я могу читать его с помощью другое расширение, одно из которых написано в Objective C.
Это исключение появляется при запуске в симуляторе. Код появляется для правильной работы при работе на 32-битном устройстве (iPhone 5 и iPad 3). В настоящее время у меня нет 64-битного устройства для тестирования.
Я предполагаю, что мне не хватает import
или рамки, но какой (-ы)?
Что такое формат 'data' на вызывается точка NSKetedUnarchiver'? Возможно ли изменение значений или структуры классов в коде, поскольку они сначала сохраняются в файловой системе? Очистка полученных данных/кэшей может рассказать вам, если это проблема. – ColinMasters
Он просто передает NSK в NSKeyedArchiver. Я обновил свой вопрос с помощью этого кода. –