gpt4 book ai didi

ios - 重新加载 CollectionView 不会清除以前加载的单元格

转载 作者:可可西里 更新时间:2023-11-01 04:42:01 24 4
gpt4 key购买 nike

我有一个 iOS 应用程序,它利用 RestKit 0.20.1 从 Restful 网络服务检索数据。我还应该添加应用程序使用 CoreData。当应用程序启动时,主屏幕是一个由默认搜索词填充的 Collection View 。标题中还有一个用作搜索栏的文本字段。

当用户使用搜索栏时,我无法清除之前加载的单元格。它只是加载新的单元格并将之前的单元格向下推。这是适用的代码。

- (BOOL) textFieldShouldReturn:(UITextField *)textField {

//This sets up the NSDictionary for the Restkit postObject parameters
NSArray *objects =[NSArray arrayWithObjects:textField.text, nil];
NSArray *keys =[NSArray arrayWithObjects: @"query",nil];
NSDictionary *params = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
self.search=params;

//This is the POST request to the server
[[RKObjectManager sharedManager] postObject:nil path:@"/rest/search?ip=255.255.255.0" parameters:search success:nil failure:nil];

//This is what I thought would clear out the old and replace with the new
[self.collectionView reloadData];

[textField resignFirstResponder];
return YES;
}

我引用了这个问题 How to remove all items and add new items to UICollectionView? [collectionView reloadData] 是公认的答案。

我从 this 中选择了 textFieldShouldReturn: 方法教程。我还引用了 Inserting, Deleting, and Moving Section Items在苹果开发者库中,但我不太确定如何实现删除项目方法。

任何帮助都会很棒。这显然是一个菜鸟问题,因此代码片段非常有用。

更新:这是我如何让它工作的。

在上面代码中的 postObject 方法和 [self.collectionView reloadData] 语句之前添加了对 deleteAllEntitiesForName 方法的调用,如下所示。

- (void) deleteAllEntitiesForName:(NSString*)entityName {
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:entityName inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSError *error = nil;
NSArray *array = [moc executeFetchRequest:request error:&error];
if (array != nil) {
for(NSManagedObject *managedObject in array) {
[moc deleteObject:managedObject];
}
error = nil;
[moc save:&error];
}

}

我从这里得到它:Correct way to refresh Core Data database

最佳答案

根据 UICollectionView(不是 RestKit)的经验,您可能需要在调用 reloadData 之前清除数据源。您产生这种效果的原因是您用来确定 Collection View 中的项目和部分数量的来源仍然包含旧数据。

验证这一点的一个简单方法是在调用 reloadData 之前对数据源的内容进行 NSLog。

希望这对您有所帮助!

关于ios - 重新加载 CollectionView 不会清除以前加载的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17311203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com