iOS是否有可用的数据绑定机制?

23

在.NET中,我只需要像DataForm.Source = Object这样做,然后就会发生奇迹。平台将数据更改从UI字段路由到对象属性,执行验证等操作。我能否在Cocoa Touch和CoreData对象上做类似的事情?

8个回答

15
在Cocoa中,与之最接近的是'键值观察(Key-Value Observing)'。在桌面版的Cocoa框架中,您可以使用绑定(bindings)将用户界面元素与底层对象连接起来,以便对象或UI元素的更改反映在另一个上。
虽然iOS上的Cocoa没有这种UI绑定,但您仍然可以像这里描述的那样使用'键值观察'将数据模型中的更改与UI元素同步:http://developer.apple.com/library/iOS/#documentation/General/Conceptual/Devpedia-CocoaApp/KVO.html

2
我无法让上面的链接工作,但下面的链接对我有效。http://developer.apple.com/library/iOS/#documentation/General/Conceptual/Devpedia-CocoaApp/KVO.html - Robotic Cat
6
希望你能翻译这个链接:Key-Value Programming Guide - Google Search这是一个关于“键-值编码”编程指南的搜索链接。 - nacho4d
2
我猜你的意思是:键值观察编程指南 - jdtogni
是的,这是一个很棒的想法。 - sahara108

15

12

可能还应该提到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);
}];

3
如果你正在使用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)
  }

3

不要忘记使用NSFetchedResultsController

它虽然不是完整的数据绑定控制器,但可以让使用Core Data的表格视图更加容易。


2

1
我在我的TableViewControllers中使用了斯坦福大学的CoreDataTableViewController。它隐藏了很多你通常需要在TableViewController中实现的细节。
在Google上搜索CoreDataTableViewController.h和.m将对你有所帮助。有来自几个课程的版本可用,最新版使用自动引用计数(ARC),旧版本则没有。
对于将标签和编辑字段与NSManagedObject同步,我仍在寻找一个好的解决方案。

0

是的,有一个数据绑定框架可以很好地集成到Interface Builder中,并且只需要很少的代码开销(如果有的话)。

看一下https://github.com/mutech/aka-ios-beacon

编辑: 例如,您可以通过将界面构建器中表视图的数据源绑定属性设置为以下内容来将表视图绑定到获取的结果控制器:

[ yourResultsController ] { defaultCellMapping: "YourCellId" }

而您唯一需要做的事情就是在您的视图控制器中定义一个yourResultsController属性。

wiki提供了相当完整的文档和许多示例用例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接