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