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

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

Ответы [ 8 ]

15 голосов
/ 23 марта 2012

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

На GitHub есть еще несколько похожих библиотек:

15 голосов
/ 05 октября 2010

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

Хотя у Какао в iOS нет такого рода привязок пользовательского интерфейса, вы все равно можете использовать «Наблюдение значения ключа» для синхронизации изменений в модели данных с элементами пользовательского интерфейса, как описано здесь:

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

12 голосов
/ 20 марта 2013

Вероятно, следует также упомянуть Github's Reactive Cocoa , платформу для составления и преобразования последовательностей значений, версию .NET Reactive Extensions (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);
}];
3 голосов
/ 15 апреля 2015

Если вы используете Swift, ознакомьтесь с Bond framework: 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)
  }
3 голосов
/ 13 июня 2011

Не забудьте NSFetchedResultsController.

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

2 голосов
/ 26 мая 2013

STV (http://sensiblecocoa.com) - это инфраструктура, которая может делать это в табличных представлениях

1 голос
/ 19 февраля 2012

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

Поиск в Google для CoreDataTableViewController.h и .m поможет вам в пути. Доступны версии из нескольких курсов, последний - ARC, старый - нет.

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

0 голосов
/ 13 марта 2016

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

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

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

[ yourResultsController ] { defaultCellMapping: "YourCellId" }

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

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

...