有没有可用于iOS的数据绑定机制?
在.NET中,我只是做一些像DataForm.Source = Object,然后魔术发生。 平台将数据从UI文件更改为对象属性,进行validation等等。 我可以做与Cocoa Touch和CoreData对象类似的东西吗?
cocoa最接近的是“关键价值观察”。 在桌面Cocoa框架中,您可以使用绑定将用户界面元素挂钩到底层对象,以便对象或UI元素中的更改反映在另一个中。
虽然iOS上的Cocoa没有这种UI绑定,但您仍然可以使用“Key-Value Observing”将数据模型中的更改与UI元素同步,如下所述:
http://developer.apple.com/library/iOS/#documentation/General/Conceptual/Devpedia-CocoaApp/KVO.html
我写了一个小的开源库,提供了一些简单的数据绑定function。 它基本上只是一个关键值观察(KVO)的包装。
GitHub上还有一些类似的库:
也许还应该提到Github的Reactive Cocoa ,一个用于组合和转换值序列的框架,一个.NET的Reactive Extensions(Rx)的Objective-C版本。
绑定机制可以非常简单地完成(从样本中):
// 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); }];
不要忘记NSFetchedResultsController
。
不是一个完整的数据绑定控制器,但使表视图更容易与Core Data一起使用。
如果您使用的是Swift,请查看Bond框架: https : //github.com/ReactiveKit/Bond
绑定如下简单:
textField.reactive.text.bind(to: label.reactive.text)
它与function:
textField.reactive.text .map { "Hi " + $0 } .bind(to: label.reactive.text)
并提供简单的观察:
textField.reactive.text .observeNext { text in print(text) }
STV( http://sensiblecocoa.com )是一个可以在tableview中完成的框架
我使用斯坦福大学的CoreDataTableViewController为我的TableViewControllers。 它隐藏了很多你通常在TableViewController中实现的细节。
searchCoreDataTableViewController.h和.m将帮助你的道路上。 有几个版本可用的课程,最新的是ARC,旧的不。
为了同步NSManagedObject的标签和编辑字段,我仍然在寻找一个好的解决scheme。
是的,有一个数据绑定框架可以很好地集成到Interface Builder中,只需要很less的代码开销(如果有的话)。
看看https://github.com/mutech/aka-ios-beacon
编辑:你可以例如绑定一个表视图到一个抓取结果控制器,只需通过在接口生成器中将表视图的数据源绑定属性设置为:
[ yourResultsController ] { defaultCellMapping: "YourCellId" }
而你唯一要做的就是在视图控制器中定义一个属性yourResultsController
。
维基提供了一个相当完整的文档和很多示例用例。