这里非常直截了当的问题;我正在使用UICollectionView
并希望每个部分显示一定数量的图像,这些图像由与该部分匹配的图像数确定。
例如:
Category: x
# Images in Category: y
# Images In Section: y
我已将所有内容排序到类别中,我可以获取每个类别的计数,但我不确定如何为“类别”部分中的每个图像返回正确的值。这是我到目前为止所得到的:
- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
// Category Delineater Here
for (int i = 0; i <= _categoryCount.count; i++)
{
PFQuery *tiredQuery = [[PFQuery alloc] initWithClassName:@"savedImages"];
[tiredQuery whereKey:@"imageCategory" equalTo:[_categoryCount objectAtIndex:0]];
[tiredQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
{
if (!error)
{
NSLog(@"What does this return? %@", objects);
}
else
{
NSLog(@"This returns an error: %@", error);
}
}];
}
return _extractedImagesArray.count;
}
目前,_extractedImagesArray.count
是下载的图片总数。如何根据特定类别的图像数量更改此部分中返回的金额?
编辑:澄清数据结构:
每张图片都附有一个类别。这些图像都放在Parse上的同一个Class中。
我的最终目标是让它看起来与此类似(在这种情况下代表图像的[x]):
第1类 X X X X X
第2类 X X X
第3类 X X X X
等等
答案 0 :(得分:0)
这一行看起来像一个问题:
[tiredQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
您正在使用的方法是异步运行的,因此您不会立即获得结果。 -collectionView:numberOfItemsInSection:
不会等待您异步查找对象然后计算它们 - 您需要立即返回对象数。
听起来你可能需要提前做一些处理以确定每个部分中的对象数量,然后记住某处的计数,以便在收集视图询问时可以提供它们。
答案 1 :(得分:0)
看起来你正在使用Parse。
重新加载数据时,不应该调用后端。尝试这样的事情:
- (void)getImages {
for (int i = 0; i <= _categoryCount.count; i++) {
PFQuery *tiredQuery = [[PFQuery alloc] initWithClassName:@"savedImages"];
[tiredQuery whereKey:@"imageCategory" equalTo:[_categoryCount objectAtIndex:0]];
[tiredQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
_extractedImagesArray = objects;
[collectionView reloadData];
}
else {
NSLog(@"This returns an error: %@ %@", error, [error userInfo]);
}
}];
}
}
- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return _extractedImagesArray.count;
}
以下是返回不同数量项目的示例,该项目与您引用的部分无关。请记住,第0部分始终是第一部分。
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
switch (section) {
case 0:
return xNumber;
break;
case 1:
return yNumber;
break;
case 2:
return zNumber;
}
}