UserDefaults имеют разные значения в одной группе приложений - PullRequest
0 голосов
/ 23 октября 2018

У меня есть приложение + расширение, и я сделал общее хранилище следующим образом

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 и правильные значения (потому что я помещаю значения через Mainприложение, но когда я отлаживаю расширение, у меня есть адреса памяти B и никаких значений внутри.

Я использую одну и ту же группу AppGroup как для приложения Main, так и для приложения Extension, и я получаю доступ к данным, подобным этому

   let personNames = UserDefaults.extensions.personNames

Проблема в том, что я использую бесплатную учетную запись Apple Id? У меня есть возможность создавать группы с этой учетной записью, поэтому я сомневаюсь.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Хорошо, я нашел решение.Я создал новую группу в формате goup.com.company.appName.sharedStorage, а также использую ее как suitName, и все работает.

Так что, возможно, из-за бесплатной учетной записи Apple возникла проблема с созданием групп приложений (потому что это происходит автоматически) или из-за того, что формат group.appName недопустим.

0 голосов
/ 23 октября 2018

РЕДАКТИРОВАТЬ:
Да, вам может потребоваться платная учетная запись разработчика 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()
    }
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...