UICollectionView NSFetchedResultsController 创建部分并将项目移动到其中

Posted

技术标签:

【中文标题】UICollectionView NSFetchedResultsController 创建部分并将项目移动到其中【英文标题】:UICollectionView NSFetchedResultsController create section and move item into it 【发布时间】:2013-01-23 13:29:46 【问题描述】:

我正在使用带有核心数据和 NSFetchedResultsController 的 UICollectionView。

当一个单元格被选中时,我想将它移动到集合视图顶部的不同部分。问题是该部分可能尚未添加。在将单元格移动到新部分之前,我基本上需要在选择单元格时添加一个新部分。

见下文-

这可能吗?

【问题讨论】:

【参考方案1】:

看起来好像您以错误的方式处理此问题。如果我是你,我会尝试删除该对象,然后使用正确的部分键重新插入它。

因此,如果您的 NSManagedObject 的 section-key 为 1,则您需要在删除对象时将对象值存储在本地。然后您可以使用存储的值创建一条新记录,并将 section-key 更新为 0。

这应该删除旧单元格并在新部分中插入一个新单元格。

见下文-

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

    NSManagedObject *obj = [_fetchedResultsController objectAtIndexPath:indexPath];

    NSString *name = obj.name;

    [self.managedObjectContext deleteObject:task];

    NSError *error = nil;
    [self.managedObjectContext save:&error];

    NSManagedObject *newObj = [NSEntityDescription insertNewObjectForEntityForName:@"entityName" inManagedObjectContext:self.managedObjectContext];


    [newObj setValue:name forKey:@"name"];

    [self.managedObjectContext newObj];

    error = nil;
    [self.managedObjectContext save:&error];

【讨论】:

感谢您,这似乎是一条显而易见的路,而且运行良好! 这对我来说似乎不是一个好的解决方案。如果您有一个使用sectionNameKeyPath: 参数将结果分组为部分的获取结果控制器,那么[obj setValue:@(newSectionNumber) forKey:@"sectionNumber"] 之类的内容应该足以将对象自动移动到不同的部分。

以上是关于UICollectionView NSFetchedResultsController 创建部分并将项目移动到其中的主要内容,如果未能解决你的问题,请参考以下文章

使用来自两个实体的 NSFetchedResultsController(s)

折叠UICollectionView

-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败

如何滚动另一个 UICollectionView 下方的 UICollectionView?

UICollectionView 单元内部已加载,但 UICollectionView 未显示

UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]