Подтвердить что ты не робот

Есть ли какой-либо механизм привязки данных для iOS?

В .NET я просто делаю что-то вроде DataForm.Source = Object, а затем происходит магия. Платформа передает данные изменения от ui fileds до свойств объекта, делает валидацию и так далее. Могу ли я сделать что-то подобное с объектами Cocoa Touch и CoreData?

4b9b3361

Ответ 1

Ближайшая вещь в Cocoa - "Наблюдение за ключевыми значениями". В среде рабочего стола Cocoa вы можете использовать привязки для привязки элементов пользовательского интерфейса к базовым объектам, чтобы изменения в объектах или элементах пользовательского интерфейса отражались в другом.

В то время как Cocoa в iOS не имеет такого типа привязок UI, вы все равно можете использовать "Наблюдение за ключевыми значениями" для синхронизации изменений в модели данных с элементами пользовательского интерфейса, как описано здесь:

http://developer.apple.com/library/iOS/#documentation/General/Conceptual/Devpedia-CocoaApp/KVO.html

Ответ 2

Я написал небольшую библиотеку с открытым исходным кодом, которая предоставляет некоторые простые функции привязки данных. Это в основном просто обертка вокруг наблюдения за ключом (KVO).

В GitHub есть несколько других подобных библиотек:

Ответ 3

Вероятно, следует также упомянуть Github Reactive Cocoa, структуру для составления и преобразования последовательностей значений, версию objective-C.NET. Реактивные расширения (Rx).

Механизм связывания может быть сделан очень простым (из образца):

// RACObserve(self, username) creates a new RACSignal that sends a new value
// whenever the username changes. -subscribeNext: will execute the block
// whenever the signal sends a value.
[RACObserve(self, username) subscribeNext:^(NSString *newName) {
    NSLog(@"%@", newName);
}];

Ответ 4

Не забывайте NSFetchedResultsController.

Не полный обработчик данных, связанный с данными, но делает таблицы намного проще в использовании с Core Data.

Ответ 5

Если вы используете Swift, проверьте структуру Bond: https://github.com/ReactiveKit/Bond

Связывание так же просто, как:

textField.reactive.text.bind(to: label.reactive.text)

Он хорошо работает с функционалом:

textField.reactive.text
  .map { "Hi " + $0 }
  .bind(to: label.reactive.text)

И дает простые наблюдения:

textField.reactive.text
  .observeNext { text in
    print(text)
  }

Ответ 6

STV (http://sensiblecocoa.com) - это фреймворк, который может делать это в виде таблиц

Ответ 7

Я использую CoreDataTableViewController из Стэнфордского университета для своих TableViewControllers. Он скрывает множество деталей, которые вы обычно реализуете в своем TableViewController.

Googling для CoreDataTableViewController.h и .m поможет вам в дороге. Существуют версии из нескольких доступных курсов, последние ARC, старые не имеют.

Для синхронизации ярлыков и редактирования полей с помощью NSManagedObject я все еще ищу хорошее решение.

Ответ 8

Да, существует структура привязки данных, которая хорошо интегрируется в Interface Builder и требует только минимальных накладных расходов кода (если вообще).

Взгляните на https://github.com/mutech/aka-ios-beacon

EDIT: Вы можете, например, привязать представление таблицы к выбранному контроллеру результатов просто путем установки свойства привязки источника данных в представлении таблицы в конструкторе интерфейса:

[ yourResultsController ] { defaultCellMapping: "YourCellId" }

И единственное, что вам нужно сделать, это определить свойство yourResultsController в вашем контроллере вида.

wiki предоставляет довольно полную документацию и множество примеров использования.