У меня есть приложение 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"]
Затем происходит странная вещь в виде следующих шагов:
- поделиться данными из третьего приложения.
- если приложение не запущено, то после открытия данные равны нулю.
- если приложение запущено, то приложение переключается для правильного получения данных .
То есть данные отсутствуют при запуске приложения. В чем тогда причина?