Что описывает цель-C и Привязку Какао лучше всего?

Простая и без проблем :: Библиотека Android-SharedPreferences-Helper

Лучше поздно, чем никогда: я создал библиотеку Android-SharedPreferences-Helper , чтобы помочь уменьшить сложность и усилие использования SharedPreferences. Он также предоставляет некоторые расширенные функции. Немногие вещи, которые он предлагает, следующие:

  • Инициализация и настройка одной строки
  • Легко выбирать, использовать ли настройки по умолчанию или файл пользовательских настроек
  • Предопределенные (по умолчанию значения по типу данных) и настраиваемые (что вы можете выбрать) значения по умолчанию для каждого типа данных
  • Возможность установки другого значения по умолчанию для однократного использования только с дополнительным параметром
  • Вы можете зарегистрировать и отменить регистрацию OnSharedPreferenceChangeListener, как и для класса по умолчанию
blockquote>
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 .

21
задан Quinn Taylor 30 June 2009 в 09:01
поделиться

2 ответа

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

недостаток - то, что необходимо строго соответствовать требованиям Привязки Какао. Они просты, но много более старых приложений разработано способом, который не соответствует Привязке Какао.

  • необходимо создать реальные объекты модели, не только передать элементарные объекты (например, массивы словарей) вокруг. При использовании Базовых Данных это легко: Ваши управляемые объекты являются объектами модели.
  • необходимо или записать средства доступа правильно или синтезировать корректные средства доступа. Например, свойство NSString должно всегда быть @property(copy), никогда @property(retain) (потому что иначе, Вы сохраните чужую изменяемую строку, которую они тогда видоизменят, в то время как Вы держите его).
  • Вы должны только [1 114] свойства изменения Ваших объектов модели их свойствами (model.foo = bar) или сообщениями средства доступа ([model setFoo:bar]), никогда прямым доступом переменной экземпляра. (Очевидное исключение для самих методов доступа, если Вы записали свое собственное, потому что они должны получить доступ к переменной экземпляра непосредственно.)

существует два преимущества:

  • можно записать совершенно новый класс представления, не имея необходимость срывать много кода связующего звена. Большинство, которое необходимо будет удалить, является приблизительно [1 110] сообщения для свойств старого представления. Если, несколько лет в будущем, Вы решаете, что Ваше текущее представление просто не может масштабироваться к предстоящей поддержке Вашего приложения, это дает Вам гибкость, чтобы сорвать его и начать заново с минимумом боли.
  • , Что еще более важно, чем меньше кода Вы имеете для чтения, тем легче считать его.

*And, согласно документации, реализуют метод наблюдений KVO в классе представления, но я никогда не должен был на самом деле делать этого. Я зарегистрировал ошибка документации .

Добавленный 07.03.2009: А-ч, найденный цитатой. Подклассы “NSView могут представить дополнительные key-value-coding/key-value-observing совместимые свойства как привязку путем вызова метода класса exposeBinding: для каждого из свойств. ” — NSKeyValueBindingCreation, Таким образом, Вы не должны должны быть реализовывать метод наблюдений KVO.

29
ответ дан 29 November 2019 в 20:21
поделиться

Предыдущий ответ является очень всесторонним и хорошим, я только что думал, что добавлю, что ответ объясняет, что это в его ядре, не включая Какао или 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. Привязка заботится об этом автоматически.

Сводная

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

16
ответ дан 29 November 2019 в 20:21
поделиться