Objective c UICollectionView NSFetchedResultsController创建节并将项移动到其中

Objective c UICollectionView NSFetchedResultsController创建节并将项移动到其中,objective-c,core-data,nsfetchedresultscontroller,uicollectionview,Objective C,Core Data,Nsfetchedresultscontroller,Uicollectionview,我正在使用UICollectionView和核心数据以及NSFetchedResultsController 选择单元格后,我希望将其移动到集合视图顶部的其他部分。问题是该部分可能尚未添加。我基本上需要添加一个新的部分时,一个单元格被选中,然后我移动到新的部分单元 见下文- - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

我正在使用UICollectionView和核心数据以及NSFetchedResultsController

选择单元格后,我希望将其移动到集合视图顶部的其他部分。问题是该部分可能尚未添加。我基本上需要添加一个新的部分时,一个单元格被选中,然后我移动到新的部分单元

见下文-

- (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];
}


这是可能的吗?

看起来你做得不对。如果我是你,我会尝试删除对象,然后用正确的分区键重新插入

因此,如果NSManagedObject的节键为1,则需要在删除对象时本地存储对象值。然后,您可以使用存储的值创建一个新记录,并将节键更新为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];
}

看起来你是在用错误的方式做这件事。如果我是你,我会尝试删除对象,然后用正确的分区键重新插入

因此,如果NSManagedObject的节键为1,则需要在删除对象时本地存储对象值。然后,您可以使用存储的值创建一个新记录,并将节键更新为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”]
这样的东西应该足以自动将对象移动到不同的节中。感谢这一点,这似乎是一个显而易见的方法,而且它工作得很好!对我来说,这似乎不是一个好的解决办法。如果您有一个使用
sectionNameKeyPath:
参数将结果分组到节中的获取结果控制器,那么类似于
[obj setValue:@(newSectionNumber)forKey:@“sectionNumber”]
的内容应该足以自动将对象移动到不同的节中。