RBQFetchedResultsController 5.0.2

RBQFetchedResultsController 5.0.2

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最近发布2016年12月

Adam FishBen Chatelain 维护。



 
依赖
Realm>= 1.0.0
RBQSafeRealmObject>= 0
RealmUtilities>= 0
 

由 Realm 支持的 NSFetchedResultsController 的替代方案。
现在支持带有完整 Swift API 的 Realm Swift!

RBQFetchedResultsController (FRC) 是 NSFetchedResultsController 的替代方案,与 Realm 一起工作。控制器和委托遵循与 NSFetchedResultsController 相同的范例,并允许开发人员监视 RLMObject 子类的更改。

RBQFetchedResultsController 支持表格视图分区,并实现了用于传递更改以进行分区和行动画的替代委托。

Realm 类需要主键才能与 RBQFetchedResultsController 一起使用。

Swift API 与 Objective-C 相似,以下为类

  • FetchResultsController
  • FetchRequest
  • SafeObject

示例

使用 ABFRealmTableViewController (依赖于 RBQFetchedResultsController)构建的基本待办事项列表应用程序。

Todo List Backed By ABFRealmTableViewController

工作原理

从 v4.0 和 Realm v0.99 开始,RBQFetchedResultsController 可自动与 Realm 的精细粒度通知支持一起工作。除非您需要支持分区,否则建议直接使用 Realm 的 API 而不是 RBQFetchedResultsController

Realm 生成的更改将重新处理以计算任何分区的更改。然后,这些更改将传递给委托

Objective-C

-(void)controllerWillChangeContent:(RBQFetchedResultsController *)controller;

-(void)controller:(RBQFetchedResultsController *)controller
   didChangeObject:(RBQSafeRealmObject *)anObject
       atIndexPath:(NSIndexPath *)indexPath
     forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath;

-(void)controller:(RBQFetchedResultsController *)controller
  didChangeSection:(RBQFetchedResultsSectionInfo *)sectionInfo
           atIndex:(NSUInteger)sectionIndex
     forChangeType:(NSFetchedResultsChangeType)type;

-(void)controllerDidChangeContent:(RBQFetchedResultsController *)controller;

Swift

func controllerWillChangeContent<T: Object>(controller: FetchedResultsController<T>)

func controllerDidChangeObject<T: Object>(controller: FetchedResultsController<T>, anObject: SafeObject<T>, indexPath: NSIndexPath?, changeType: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?)

func controllerDidChangeSection<T:Object>(controller: FetchedResultsController<T>, section: FetchResultsSectionInfo<T>, sectionIndex: UInt, changeType: NSFetchedResultsChangeType)

func controllerDidChangeContent<T: Object>(controller: FetchedResultsController<T>)

文档

请点击此处

迁移

从 v4.0 开始,RBQFetchedResultsController 现仅使用其内部 Realm 的特定模式进行分区缓存。这意味着不再需要处理缓存的 Realm 迁移!

安装

RBQFetchedResultsController 通过 CocoaPods 或 Carthage 提供。

演示

使用 Xcode 编译并运行/测试 Example 项目的示例,以观察 RBQFetchedResultsController 的实际效果。该项目使用了 CocoaPods。如果您尚未安装 CocoaPods,请使用 [sudo] gem install cocoapods 命令进行安装。

Objective-C

git clone http://github.com/Roobiq/RBQFetchedResultsController
git submodule init
git submodule update
cd Examples/ObjC
pod install
open RBQFetchedResultsControllerExample.xcworkspace

Swift

git clone http://github.com/Roobiq/RBQFetchedResultsController
git submodule init
git submodule update
cd Examples/Swift
pod install
open RBQFRCSwiftExample.xcworkspace

注意:示例项目通过直接包含源文件和使用 CocoaPods 安装 Realm 来安装框架。还有一些示例项目是使用 CocoaPods 和 Carthage 安装框架的测试/演示。对于 CocoaPods 安装示例应用(ObjC-cocoapods/Swift-cocoapods),框架作为开发依赖项安装,参照本地 podspec 和源文件。按照上述同样步骤进行,因为执行 pod install 命令会简单包含框架。

对于 Carthage 的示例应用(ObjC-carthage/Swift-carthage),在上述步骤执行 git submodule update 后,您必须运行 carthage update,以确保 Carthage 能够在本地构建 Realm 框架。示例项目随后就像使用 Carthage 生成的结果框架一样使用 RBQFetchedResultsController.xcodeproj

当前状态

示例项目包含了各种功能和单元测试。此外,项目已在我们的Roobiq应用中使用,非常稳定。