【发布时间】:2014-04-29 15:38:28
【问题描述】:
试图想出一种动态排序 UICollectionView 项目的方法非常沮丧。
第一次加载 UICollectionView 时,会运行另一种执行查询的方法。此方法一次仅加载 4 个项目,并且始终与我的分页一起使用以加载 4 个。使用此方法设置排序更加令人困惑,因为我一次只能对 4 个项目进行排序。
所以我创建了另一种方法来在尝试对 UICollectionView 项目进行排序时执行查询。
我有一个 UIPickerView 允许客户对购物项目进行排序:
点击完成按钮后,将执行查询 parse.com:
- (void)pickerDoneButtonTapped
{
NSLog(@"Picker done button pressed");
[_thisController performQueryForFilter];
}
它返回一个排序对象的 NSArray,具体取决于选择器中的哪一行:
-(PFQuery *)queryForCollection
{
PFQuery *query = [PFQuery queryWithClassName:@"Garments"];
// check what the selectedRowInFilterPicker currently is
// then add that task to the query
if (_selectedRowInFilterPicker == 0) {
NSLog(@"ORDER BY RECOMMENDED");
} else if (_selectedRowInFilterPicker == 1) {
NSLog(@"ORDER BY NEWEST ITEMS");
} else if (_selectedRowInFilterPicker == 2) {
NSLog(@"ORDER BY DESCENDING USING PRICE");
[query orderByDescending:@"price"];
} else if (_selectedRowInFilterPicker == 3) {
NSLog(@"ORDER BY ASCENDING USING PRICE");
[query orderByAscending:@"price"];
}
return query;
}
这是在点击完成按钮时触发的 performQueryForFilter 方法:
- (void)performQueryForFilter
{
NSLog(@"PERFORM QUERY FOR FILTER");
PFQuery *query = self.queryForCollection;
[self objectsWillLoad];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
self.isLoading = NO;
if (error)
self.objects = [NSArray new];
else {
if (_paginationEnabled && !_isRefreshing) {
//add a new page of objects
NSMutableArray *mutableObjects = [NSMutableArray arrayWithArray:self.objects];
[mutableObjects addObjectsFromArray:objects];
self.objects = [NSArray arrayWithArray:mutableObjects];
}
else {
self.objects = objects;
}
}
[self objectsDidLoad:error];
}];
}
这在一定程度上可以正常工作。我在 UIPickerView 中进行选择,然后完成。现在,在重新加载 UICollectionView 中的数据后,我遇到了 2 个问题。
-
1. 正确排序的对象的整个 NSArray 现在是我的 dataSource 的数据,因此在重新加载数据后,所有这些对象都将添加到 UICollectionView。
2. 首次加载 UICollectionView 时默认显示的先前单元格仍然保留。所以新排序的对象刚刚添加到下面。
现在我的数据库中最多有 9 行。现在假设将来有 1000 行。每次用户想要使用从低到高或从高到低的选项对项目进行排序时,我都无法加载 1000 行并将其添加到 UICollectionView。
请帮我看看哪里出了问题,或者至少展示一个更好的方法来做到这一点。
【问题讨论】:
-
为什么我被标记了?我一直在寻找有关如何执行此操作的解决方案和信息。我总是在发布问题之前采取这些步骤。
-
不知道你为什么被否决。不要认为这个 Q 应得的,所以我支持你。
标签: ios objective-c sorting uicollectionview parse-platform