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

时间:2010-09-28 13:02:32

标签: cocoa-touch data-binding core-data ios

在.NET中,我只是执行类似DataForm.Source = Object的操作,然后发生魔术。平台将数据从ui文件路由到对象属性,进行验证等。我可以使用Cocoa Touch和CoreData对象做类似的事情吗?

8 个答案:

答案 0 :(得分:15)

Cocoa中最接近的是'Key-Value Observing'。在桌面Cocoa框架中,您可以使用绑定将用户界面元素挂钩到底层对象,以便对象或UI元素中的更改反映在另一个对象中。

虽然iOS上的Cocoa没有这种UI绑定,但您仍然可以使用“键值观察”来将数据模型中的更改与UI元素同步,如下所述:

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

答案 1 :(得分:15)

我写了一个小开源库,它提供了一些简单的数据绑定功能。它基本上只是键值观察(KVO)的包装。

GitHub上还有一些类似的库:

答案 2 :(得分:12)

可能还应该提到Github的Reactive Cocoa,一个用于组合和转换值序列的框架,一个.NET的Reactive Extensions (Rx)的客观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 :(得分:3)

不要忘记NSFetchedResultsController

不是一个完整的数据绑定控制器,但使得表格视图更容易与Core Data一起使用。

答案 4 :(得分: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)
  }

答案 5 :(得分:2)

STV(http://sensiblecocoa.com)是一个可以在tableviews中执行此操作的框架

答案 6 :(得分:1)

我使用斯坦福大学的CoreDataTableViewController作为我的TableViewControllers。它隐藏了许多您通常在TableViewController中实现的细节。

使用Google搜索CoreDataTableViewController.h和.m将在旅途中为您提供帮助。有几个课程的版本,最新的ARC,旧的没有。

为了使用NSManagedObject同步标签和编辑字段,我仍然在寻找一个好的解决方案。

答案 7 :(得分:0)

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

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

编辑: 例如,您可以将表视图绑定到获取的结果控制器,只需将接口构建器中的表视图的数据源绑定属性设置为:

[ yourResultsController ] { defaultCellMapping: "YourCellId" }

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

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