NXCollectionViewDataSource 1.2.2

NXCollectionViewDataSource 1.2.2

测试已测试
Lang语言 Obj-CObjective C
许可证 BSD
发布最后一次发布2015年10月

GennfThomas Kollbachnxtbgthng维护。



  • Tobias Kräntzer、Andreas Goese 和 Thomas Kollbach 提供

UICollectionView 数据源

本项目为 UICollectionView 提供通用数据源类。可以使用提供为数组的数组作为静态内容的 NXStaticCollectionViewDataSource。可以使用 NSFetchRequestNXFetchedCollectionViewDataSource,它将在数据库内容发生变化时保持集合视图的更新。

一般用法

数据源必须使用要管理的集合视图进行初始化,此后,对集合视图的控制权交给数据源,并且不得手动调用插入、移动或删除单元格的方法。

创建数据源

静态数据源只接受集合视图作为参数,已提取的数据源还需要该数据源应使用的托管对象上下文。

// Get a Reference to the collection view.

UICollectionView *collectionView = ... the collection view ...

// Create the Data Source with the collection view
// and (in case of a fetched data source) a managed obejct context.  

NXFetchedCollectionViewDataSource *dataSource = [[NXFetchedCollectionViewDataSource alloc] 
                                                    initWithCollectionView:collectionView
                                                      managedObjectContext:self.managedObjectContext];

注册单元格和补充视图

单元格和补充视图可以注册为类或 nib。注册是与准备块一起完成的。此块用于准备,可以用它从数据源获取项并设置为其单元格(或补充视图)的值。

[dataSource registerClass:[MyCollectionViewCell class]    
         withPrepareBlock:^(id view, NSIndexPath *indexPath, NXCollectionViewDataSource *dataSource) {

         MyCollectionViewCell *cell = view;

         id myItem = [dataSource itemAtIndexPath:indexPath];
         cell.item = myItem;
}];

由于数据源持有块的强引用,必须小心不要构建保留周期。如果可能,请在这些块中避免引用 self。

加载数据

数据源准备完成后,它必须重新加载。这将会用内容填充集合视图,并在从数据库中提取数据(在托管对象上下文发生变化的情况下)的情况下保持数据源更新的状态。

// The fetch request defining the content which should be shown.
NSFetchRequest *request = ...

// An optional key path to have a sectioned result.
NSString *sectionKeyPath = ...

// Perform the initial fetch and keep the data source up to date.
[dataSource reloadWithFetchRequest:request
                    sectionKeyPath:sectionKeyPath];

属性与关系部分

除了由关键路径定义的部分之外,已提取的数据源还可以按属性或关系分组结果,并按对应类型返回预期值。例如,可以使用日期类型的属性将项分组为日期属性,并设置日期对象为部分项。

使用关系对节进行分组,还可以在节标题的辅助视图中访问此对象。例如,可以用它来显示人员列表,并根据其与一个群体的关系对其进行分组。节标题可以显示有关该群体的详细信息。

// Create a requet and sort the result by the group name.
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];

request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"group.name"
                                                           ascending:YES]];

// Get the entity description for the group and relaod the data source
// with this relationship for the sections.
NSEntityDescription *groupEntityDescription = ... entity description for groups ...

[dataSource reloadWithFetchRequest:request 
    sectionRelationshipDescription:groupRelationshipDescription];

// The sections are now the managed objects (in this case the groups)
// of the given relationship.
NSManagedObject *group = [datasSource itemForSection:0];

数据源目前支持一对一关系以及数字、布尔、字符串和日期属性。

BSD许可

版权所有 © 2014,nxtbgthng GmbH

保留所有权利。

重新分发和源代码及二进制形式的用法,无论是否修改,只要满足以下条件即可

源代码的分发必须保留上述版权声明、本条件列表和以下免责声明。二进制形式的分发必须在文档中或随同其发行提供的其他材料中复制上述版权声明、本条件列表和以下免责声明。未经nxtbgthng公司或其贡献者的事先书面许可,不得以nxtbgthng公司或其贡献者的名义批准或推广由此软件派生出的产品。本软件按照“现状”提供,并且不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的暗示保证。在任何情况下,不论因何种原因或任何责任理论(包括但不限于合同责任、侵权责任或任何其他直接、间接、偶然、特殊、示范性或后果性的损害),即使被告知可能发生此类损害,也不承担任何损害赔偿责任(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断),不论这种损害发生在何种情况下。