UserDefaults имеют разные значения в одной группе приложений
У меня есть приложение + расширение, и я сделал общее хранилище, как это
extension UserDefaults {
static let suiteName = "group.myApp"
static let extensions = UserDefaults(suiteName: suiteName)!
private enum Keys {
static let personNames = "personNames"
}
var personNames: [String] {
get {
guard let array = UserDefaults.extensions.array(forKey: Keys.personNames) as? [String] else {
return []
}
return array
}
set {
UserDefaults.extensions.setValue(newValue, forKeyPath: Keys.personNames)
}
}}
Но когда я отлаживаю приложение, я вижу адрес памяти A и правильные значения (потому что я помещаю значения через Основное приложение, но когда я отлаживаю расширение, у меня есть адреса памяти B и никаких значений внутри.
Я использую одну и ту же группу приложений как в основном приложении, так и в приложении Extension, и у меня такой доступ к данным
let personNames = UserDefaults.extensions.personNames
Это проблема, что я использую бесплатный аккаунт Apple Id? У меня есть возможность создавать группы с этим аккаунтом, поэтому я сомневаюсь.
2 ответа
Хорошо, я нашел решение. Я создал новую группу в формате goup.com.company.appName.sharedStorage, а также использую ее как suitName, и все работает.
Поэтому, возможно, из-за бесплатной учетной записи Apple возникла проблема с созданием групп приложений (потому что это происходит автоматически) или, возможно, из-за того, что формат group.appName недопустим.
РЕДАКТИРОВАТЬ:
Да, вам может понадобиться платная учетная запись разработчика Apple, поскольку вам нужно включить функцию группы приложений, связанную с идентификатором вашего приложения.
Оригинальный ответ:
Вам может понадобиться позвонить synchronize()
записать ваши данные немедленно на диск.
var personNames: [String] {
get {
guard let array = UserDefaults.extensions.array(forKey: Keys.personNames) as? [String] else {
return []
}
return array
}
set {
UserDefaults.extensions.setValue(newValue, forKeyPath: Keys.personNames)
UserDefaults.extensions.synchronize()
}
}}