Как удалить данные после обмена между расширением и хост-приложением в iOS - PullRequest
1 голос
/ 10 июля 2020

У меня есть приложение iOS, мне нужно обрабатывать данные общего доступа пользователей из третьего приложения. Чтобы справиться с этим, я кэширую данные с помощью UserDefaults в модуле расширения:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.app.share"];

// write data
[userDefaults setValue:[((NSURL*) item) absoluteString] forKey:@"shareData"];

//open app
[self openApp];

После этого открывается приложение, которое затем может читать и обрабатывать данные:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.app.share"];
//read data
NSString *data = [userDefaults valueForKey:@"shareData"];
NSLog(@"%@", data);

До сих пор, все в порядке. Хост приложения может правильно получить данные общего доступа из расширения.

Однако, когда мне нужно удалить данные после обработки:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.app.share"];
//read data
NSString *data = [userDefaults valueForKey:@"shareData"];
NSLog(@"%@", data);

...use the data and then remove it
[userDefaults removeObjectForKey: @"shareData"]

Затем происходит странная вещь в виде следующих шагов:

  • поделиться данными из третьего приложения.
  • если приложение не запущено, то после открытия данные равны нулю.
  • если приложение запущено, то приложение переключается для правильного получения данных .

То есть данные отсутствуют при запуске приложения. В чем тогда причина?

1 Ответ

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

Найди способ. Добавьте таймер или задержку, когда время истекло, удалите ключ в модуле расширения. Работает.

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.app.share"];

//write data
[userDefaults setObject:[((NSURL*) item) absoluteString] forKey:@"shareData"];
                        
[self openApp];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
  [userDefaults removeObjectForKey:@"shareData"];
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...