【问题标题】:Is there any data binding mechanism available for iOS?是否有适用于 iOS 的数据绑定机制?
【发布时间】:2011-04-18 07:09:25
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    Cocoa 中最接近的东西是“键值观察”。在桌面 Cocoa 框架中,您可以使用绑定将用户界面元素与底层对象挂钩,以便对象或 UI 元素中的更改反映在其他对象中。

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

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

    【讨论】:

    【解决方案2】:

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

    GitHub 上还有一些其他类似的库:

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案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 中实现的细节。

              在谷歌上搜索 CoreDataTableViewController.h 和 .m 将在路上为您提供帮助。有几个可用课程的版本,最新的 ARC 有,旧的没有。

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

              【讨论】:

                【解决方案8】:

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

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

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

                [ yourResultsController ] { defaultCellMapping: "YourCellId" }

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

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-05-18
                  • 2011-12-08
                  • 1970-01-01
                  • 2018-01-23
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多