NSUserDefaults не сохраняет значения StandardUserDefaults - PullRequest
0 голосов
/ 09 октября 2018

У меня есть приложение для iOS, разработанное с использованием Microsoft Xamarin, поэтому часть этого кода может выглядеть иначе.В любом случае вот что я пытаюсь сделать:

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

    public static void SetDefaults()
    {
        var keys = new object[]
        {
            "LastNotificationTime",
            "LastSyncTime",
            "LunchStartTime",
            "LunchEndTime",
            "OnLunchBreak",
            "PunchedIn",
            "PunchTime",
            "ShowDetailPane",
            "NotifyEmergency",
            "RunAtBoot",
            "RowsPerPage",
            "SyncInterval"
        };
        var values = new object[]
        {
            "",
            "",
            "",
            "",
            false,
            false,
            "",
            true,
            true,
            false,
            5,
            60
        };
        var defaults = NSDictionary.FromObjectsAndKeys(values, keys);
        NSUserDefaults.StandardUserDefaults.RegisterDefaults(defaults);
        NSUserDefaults.StandardUserDefaults.Synchronize();
    }

Это прекрасно работает во время первоначального запуска моего приложения.Я буду развертывать на своем устройстве с нуля, запускать приложение и затем останавливаться.Затем я повторно разверну уже установленное приложение.Я не хочу стирать значения по умолчанию и каждый раз устанавливать значения по умолчанию, поэтому я выполняю эту проверку перед этим (в этом примере Settings.GetPreferences() возвращает объект NSUserDefaults.StandardUserDefaults):

    if( Settings.GetPreferences().IntForKey("RowsPerPage") == 0 || 
        Settings.GetPreferences().IntForKey("RowsPerPage") == null )
    {
        Settings.SetDefaults();
    }

Как вы можете видеть выше, RowsPerPage изначально установлен на 5. Я ожидаю, что это значение для каждого запуска после последующей начальной установки будет сохраняться равным 5. Или что бы то ни было, выбираемое пользователем, в этом отношении.

Однако вышеупомянутая проверка всегда оказывается верной, и вызывается мой метод SetDefaults(), удаляющий все изменения, внесенные пользователем в значения по умолчанию во время последнего запуска.Кто-нибудь знает, почему это происходит?Я делаю что-то не так при установке этих значений по умолчанию?Даже после добавления не рекомендуемого устаревшего вызова метода NSUserDefaults.StandardUserDefaults.Synchronize() значения по умолчанию все еще сбрасываются.

1 Ответ

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

Ваша проблема в том, что RegisterDefaults не делает то, что вы думаете:

Из документации

Содержимое домена регистрациине записываются на диск;Вы должны вызывать этот метод каждый раз, когда ваше приложение запускается.

Если вы хотите установить начальные значения для ваших значений по умолчанию, которые сохраняются, то вам потребуется отдельная операция set для каждой операции в вашем SetDefaults метод, а не использование RegisterDefaults

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