在.NET中,我只需要像DataForm.Source = Object这样做,然后就会发生奇迹。平台将数据更改从UI字段路由到对象属性,执行验证等操作。我能否在Cocoa Touch和CoreData对象上做类似的事情?
在.NET中,我只需要像DataForm.Source = Object这样做,然后就会发生奇迹。平台将数据更改从UI字段路由到对象属性,执行验证等操作。我能否在Cocoa Touch和CoreData对象上做类似的事情?
我写了一个小型的开源库,提供一些简单的数据绑定功能。基本上就是围绕着键值观察(KVO)做了一层包装。
在GitHub上还有一些类似的库:
可能还应该提到Github的Reactive Cocoa,这是一个用于组合和转换值序列的框架,是.NET's 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);
}];
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)
}
不要忘记使用NSFetchedResultsController
。
它虽然不是完整的数据绑定控制器,但可以让使用Core Data的表格视图更加容易。
是的,有一个数据绑定框架可以很好地集成到Interface Builder中,并且只需要很少的代码开销(如果有的话)。
看一下https://github.com/mutech/aka-ios-beacon
编辑: 例如,您可以通过将界面构建器中表视图的数据源绑定属性设置为以下内容来将表视图绑定到获取的结果控制器:
[ yourResultsController ] { defaultCellMapping: "YourCellId" }
而您唯一需要做的事情就是在您的视图控制器中定义一个yourResultsController
属性。
wiki提供了相当完整的文档和许多示例用例。