Как создать/использовать общий контейнер группы приложений в качестве хранилища кеша между содержащим приложением и его расширением в ios

Обмен данными между приложением и его расширением происходит через общую AppGroup. Я могу использовать общий контейнер группы приложений в качестве постоянного хранилища данных/файлов. Как я могу создать/использовать общий контейнер группы приложений в качестве хранилища кеша между содержащим приложением и его расширением? Это вообще возможно?


person Kalai_Human    schedule 10.05.2015    source источник


Ответы (1)


Да, вы на правильном пути. Это возможно.

На вкладке Capabilities цели основного приложения и цели расширения WatchKit добавьте группу приложений, например, с именем group.myWatchDefaults.

Затем вы можете получить доступ к значениям по умолчанию следующим образом:

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.myWatchDefaults"];

Чтобы добавить данные:

[defaults setObject:[NSNumber numberWithBool:true] forKey:@"myBoolVariable"];

Чтобы получить данные:

 bool watchAppOpenedBefore = [[defaults objectForKey:@"myBoolVariable"] boolValue];

Убедитесь, что вы используете synchronizeпосле изменения значений по умолчанию:

[defaults synchronize];

Иногда синхронизация NSUserDefaults между приложением Watch и его родительским приложением с помощью групп приложений не работает при использовании симуляторов Xcode. Однако он работает на реальных устройствах (iPhone и Apple Watch). Следовательно, это похоже на ошибку симулятора.

person vomako    schedule 10.05.2015
comment
спасибо за быстрый ответ.. но я имел в виду, что я использую containerURLForSecurityApplicationGroupIdentifier: чтобы получить URL-адрес из общего контейнера, этот путь URL-адреса аналогичен полученному из метода NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], верно?. если это так, то как я могу получить доступ к NSCacheDirectory (кэш-хранилищу) с помощью общего контейнера? - person Kalai_Human; 10.05.2015
comment
В общем контейнере нет именованных каталогов (как в стандартных каталогах). Таким образом, вы должны создавать свои собственные подкаталоги по мере необходимости. - person Mike Swanson; 10.05.2015