Лучше поздно, чем никогда: я создал библиотеку Android-SharedPreferences-Helper , чтобы помочь уменьшить сложность и усилие использования SharedPreferences
. Он также предоставляет некоторые расширенные функции. Немногие вещи, которые он предлагает, следующие:
blockquote>
- Инициализация и настройка одной строки
- Легко выбирать, использовать ли настройки по умолчанию или файл пользовательских настроек
- Предопределенные (по умолчанию значения по типу данных) и настраиваемые (что вы можете выбрать) значения по умолчанию для каждого типа данных
- Возможность установки другого значения по умолчанию для однократного использования только с дополнительным параметром
- Вы можете зарегистрировать и отменить регистрацию OnSharedPreferenceChangeListener, как и для класса по умолчанию
dependencies { ... ... compile(group: 'com.viralypatel.sharedpreferenceshelper', name: 'library', version: '1.1.0', ext: 'aar') }
Объявление объекта SharedPreferencesHelper: (рекомендуется на уровне класса)
blockquote>SharedPreferencesHelper sph;
Создание объекта SharedPreferencesHelper: (рекомендуется в методе onCreate ())
blockquote>// use one of the following ways to instantiate sph = new SharedPreferencesHelper(this); //this will use default shared preferences sph = new SharedPreferencesHelper(this, "myappprefs"); // this will create a named shared preference file sph = new SharedPreferencesHelper(this, "myappprefs", 0); // this will allow you to specify a mode
Помещение значений в общие настройки
blockquote>Довольно просто! В отличие от способа по умолчанию (при использовании класса SharedPreferences) вам НЕ нужно будет называть
.edit()
и.commit()
когда-либо.sph.putBoolean("boolKey", true); sph.putInt("intKey", 123); sph.putString("stringKey", "string value"); sph.putLong("longKey", 456876451); sph.putFloat("floatKey", 1.51f); // putStringSet is supported only for android versions above HONEYCOMB Set name = new HashSet(); name.add("Viral"); name.add("Patel"); sph.putStringSet("name", name);
Вот и все! Ваши значения хранятся в общих настройках.
Получение значений из общих настроек
blockquote>Опять же, просто один простой вызов метода с именем ключа.
sph.getBoolean("boolKey"); sph.getInt("intKey"); sph.getString("stringKey"); sph.getLong("longKey"); sph.getFloat("floatKey"); // getStringSet is supported only for android versions above HONEYCOMB sph.getStringSet("name");
Он имеет множество других расширенных функций
blockquote>. Проверьте детали расширенных функций, инструкций по использованию и установке и т. д. на странице g6] GitHub Repository .
Привязка является системой для соединения Ваших представлений к Вашим контроллерам, не пишущий много кода связующего звена, чтобы заставить их явно говорить друг с другом. Все, что необходимо сделать, настраивается свойства в обоих классах*, и поднимите трубку привязку в IB.
традиционный подход состоит в том, что представление имеет один или несколько выходов, чтобы говорить с контроллером (самые универсальные примеры, являющиеся delegate
и target
), и контроллер имеет выходы, чтобы говорить с представлениями. Когда контроллер обновляет модель, он отправляет (например) [view modelChange:newModelObject]
. Когда представление хочет обновить модель, оно отправляет некоторое сообщение делегата своему делегату (контроллер), такой как NSText's textDidChange:
.
С Привязкой, все, что необходимо сделать в коде, является свойствами реализации на представлении и свойствами на контроллере, затем представьте одно или несколько свойств представления как bindings*. Тогда только необходимо поднять трубку привязку. Если это - класс Какао, это - пирог: просто настройте его в IB. Если это будет пользовательский собственный класс, то Вы, вероятно, запишете эти bind:toObject:withKeyPath:options:
сообщение сами (не намного тяжелее).
Позволяют мне вновь заявить что: С Привязкой Ваш весь код связующего звена (большую часть времени) [view bind:@"viewProperty" toObject:self withKeyPath:@"controllerProperty.modelProperty" options:options];
в контроллере. Все остальное обрабатывается Привязкой и системами KVO негласно, и средствами доступа Ваших свойств.
недостаток - то, что необходимо строго соответствовать требованиям Привязки Какао. Они просты, но много более старых приложений разработано способом, который не соответствует Привязке Какао.
@property(copy)
, никогда @property(retain)
(потому что иначе, Вы сохраните чужую изменяемую строку, которую они тогда видоизменят, в то время как Вы держите его). model.foo = bar
) или сообщениями средства доступа ([model setFoo:bar]
), никогда прямым доступом переменной экземпляра. (Очевидное исключение для самих методов доступа, если Вы записали свое собственное, потому что они должны получить доступ к переменной экземпляра непосредственно.) существует два преимущества:
*And, согласно документации, реализуют метод наблюдений KVO в классе представления, но я никогда не должен был на самом деле делать этого. Я зарегистрировал ошибка документации .
Добавленный 07.03.2009: А-ч, найденный цитатой. Подклассы “NSView могут представить дополнительные key-value-coding/key-value-observing совместимые свойства как привязку путем вызова метода класса exposeBinding: для каждого из свойств. ” — NSKeyValueBindingCreation, Таким образом, Вы не должны должны быть реализовывать метод наблюдений KVO.
Предыдущий ответ является очень всесторонним и хорошим, я только что думал, что добавлю, что ответ объясняет, что это в его ядре, не включая Какао или Objective C конкретно. Это вызвано тем, что само понятие является агностиком языка, хотя динамические языки как Objective C делают его партия легче, чем больше статического языка как C++.
Говорит, что у Вас есть два объекта M и V. M имеет методы:
setX(int x);
setY(int y);
int getX();
int getY();
, В то время как V имеет методы:
setA(int x);
setB(int y);
int getA();
int getB();
Один способ посмотреть это - то, что M имеет свойства x и y и , V имеет свойства и b. Вы хотите, чтобы изменение свойства x заставило изменение в свойстве b и изменение в [1 131] y вызывать изменение в [1 132] .
изменением в свойстве x мы имеем в виду, например:
M.setX(10)
, где ранее
M.getX() != 10
, Таким образом, мы хотим, чтобы вызов setX на [1 134] M вызвал вызов к ость на [1 135] V.
, Что позволяет привязка, Вы для высказывания - то, что свойство b на объекте V связывается со свойством x на объекте M. И затем это обновление обрабатывается автоматически. Вы как кодер не должны писать код, который проверяет, изменяется ли x , и затем звоните setB на [1 141] V. Привязка заботится об этом автоматически.
Привязка позволяет Вам связывать два свойства вместе, которые существуют на двух различных объектах, так, чтобы изменение значения одного из свойств вызвало подчиненное свойство в другом объекте измениться на то же значение.