Objective c UICollectionView NSFetchedResultsController创建节并将项移动到其中
我正在使用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 {
- (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”]
的内容应该足以自动将对象移动到不同的节中。