AWPagedArray 0.3.0

AWPagedArray 0.3.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年1月

Alek Åström 维护。



  • Alek Åström

AWPagedArray 是一个用 NSMutableDictionary 作为其骨干以提供通过标准 NSArray API 的透明分页的 NSProxy 子类。

AWPagedArray console output

这意味着数据提供者对象可以内部填充页面,而数据接收者对分页的实际工作方式一无所知。对于尚未加载的对象,代理只返回 NSNull 值。

此类对于包含来自外部 API 的分页数据的 UITableViewUICollectionView 特别有用。

安装

源文件

或者您可以直接将 AWPagedArray.hAWPagedArray.m 源文件添加到您的项目中。

  1. 下载最新的代码版本 master.zip 或将仓库作为 git 子模块添加到您跟踪的 git 项目中。
  2. 在 Xcode 中打开您的项目,然后拖放 AWPagedArray.hAWPagedArray.m 到项目中(使用“产品导航”视图)。确保在从项目外提取代码存档时选择复制项目中的项目。
  3. 使用 #import "AWPagedArray.h" 在需要的位置包括 AWPagedArray。

用法

_pagedArray = [[AWPagedArray alloc] initWithCount:count objectsPerPage:pageSize];
_pagedArray.delegate = self;

[_pagedArray setObjects:objects forPage:1];

在实例化分页数组后,您使用 setObjects:forPage: 方法设置页面,并将分页数组回显为 NSArray 给数据消费者(例如一个 UITableViewController)。

// DataProvider.h
@property (nonatomic, readonly) NSArray *dataObjects;

// DataProvider.m
- (NSArray *)dataObjects {
  return (NSArray *)_pagedArray;
}

通过 AWPagedArrayDelegate 协议,数据提供者可以在从分页数组访问数据时收到回调。这样,数据提供者可以在访问到 NSNull 值时开始加载数据页面,或者如果用户开始接近空索引,可以预加载下一页。

- (void)pagedArray:(AWPagedArray *)pagedArray
   willAccessIndex:(NSUInteger)index
      returnObject:(__autoreleasing id *)returnObject {

  if ([*returnObject isKindOfClass:[NSNull class]] && self.shouldLoadAutomatically) {
    [self setShouldLoadDataForPage:[pagedArray pageForIndex:index]];
  } else {
    [self preloadNextPageIfNeededForIndex:index];
  }
}

由于代理提供了返回对象的引用指针,它还可以动态地更改返回给消费者的内容。例如,用其他内容替换 NSNull 占位符对象。

演示

所包含的演示项目展示了使用 AWPagedArray 的数据提供者示例实现,使用流畅分页技术填充了 UITableViewControllerUICollectionViewController,如 这篇博客文章 中所述。

UITableView example UITableView example

测试

AWPagedArray 由 XCUnit 测试覆盖,这些测试可以找到在 Tests 文件夹中。

目前实现了 19 个测试。

许可证

此代码在MIT许可证的条款和条件下分发。