#ios #swift #objective-c #xcode #nskeyedunarchiver
#iOS #быстрый #цель-c #xcode #nskeyedunarchiver
Вопрос:
У меня есть приложение в App Store, которое довольно старое. Я пытаюсь написать обновленную версию. Мои исходные архивированные и неархивированные данные приложения, как показано ниже. Я не могу понять, как теперь получить доступ к этим данным в моем обновленном приложении.
- (void)saveGG { NSMutableData *data = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:givens forKey:@"Present"]; [archiver finishEncoding]; [data writeToFile:[self dataFilePath] atomically:YES]; } - (void)loadGG { NSString *path = [self dataFilePath]; if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { NSData *data = [[NSData alloc] initWithContentsOfFile:path]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; gifts = [unarchiver decodeObjectForKey:@"Present"]; [unarchiver finishDecoding]; } else { gifts = [[NSMutableArray alloc] initWithCapacity:20]; }
Комментарии:
1. В таком случае я бы сохранил этот код таким, как он есть. Свяжи его со Свифтом. В новой версии я бы проверил, существует ли этот файл, и начал бы миграцию, если это так. После завершения миграции удалите этот файл, и этот код больше никогда не будет выполняться. Цель в основном заключается в том, что этот код больше не будет поддерживаться, а будет использоваться для миграции только один раз для каждого пользователя.
2. Спасибо, Матик. Моя проблема в том, что я не могу понять, как связать этот код с Swift. У меня также есть дополнительные поля, которых не было в исходном приложении, поэтому я не передаю полностью похожие поля.
3. Что касается перехода на Swift, вам нужен заголовок моста, а затем в него импортируйте заголовочный файл этого класса, который должен предоставить два метода. При этом вы должны иметь возможность напрямую вызывать методы в Swift и использовать эти данные. Как только вы загрузите данные, вам следует вручную ввести данные в свои новые классы и сохранить их вместе с вашими новыми полями.