gpt4 book ai didi

ios - 在 Parse iOS 中为每个对象抓取第一张图像

转载 作者:行者123 更新时间:2023-11-29 02:56:02 25 4
gpt4 key购买 nike

抱歉,标题措辞不佳。我有一个逻辑问题,我正在努力解决这个问题。我正在使用的 View 有 UICollectionView显示与用户关联的“坦克”列表。此 Collection View 显示三个项目:

  • 坦克名称
  • 油箱容量
  • 最后存储的图像

最后一个图像存储部分是我遇到麻烦的地方。我正在取得进展,但我不确定其背后的逻辑问题。数据如下:

我有两个正在与之交互的类; SavedTanksSavedTankImages .独一无二objectId来自保存的坦克也作为一个值存储在 SavedTankImages 中允许对图像进行某种指针引用。当用户加载“坦克”并可以看到他们存储的与其关联的所有图像时,此逻辑就会起作用。

但是,出于此 View 的目的,我只需要从每个坦克中抓取第一张图像并显示它。这就是我需要帮助的地方。这是我到目前为止所拥有的:

#pragma mark COLLECTION VIEW
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";
photoHandler *cell = (photoHandler *)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
_tankNameArray = [_array objectAtIndex:indexPath.section * 1 + indexPath.row];
cell.tankNameLabel.text = [_tankNameArray valueForKey:@"tankName"];
cell.tankCapLabel.text = [_tankNameArray valueForKey:@"tankCapacity"];
NSArray *objectId = [_array valueForKey:@"objectId"];

for (int i = 0; i < objectId.count; i++)
{
NSString *objectString = [[NSString alloc] init];
objectString = [objectId objectAtIndex:i];

PFQuery *imageQuery = [PFQuery queryWithClassName:@"SavedTankImages"];
[imageQuery whereKey:@"tankObjectId" equalTo:objectString];
[imageQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error)
{
for (PFObject *object in objects)
{
NSLog(@"OBJECT TEST: %@", object);
}
}
}];
}
return cell;
}

关于 OBJECT TEST: %@ ,这是记录的输出:

2014-05-28 11:59:44.750 ReefTrack[305:60b] OBJECT TEST: <SavedTankImages:U6fRTuRo2c:    (null)> {
tankImages = "<PFFile: 0x18a25890>";
tankObjectId = tsz4yvrIAN;
}

SavedTankImages: <x>objectId单个图像的,和 tankObjectId是与图像关联的坦克。我已经很接近了,但我需要知道如何有效地迭代并仅获取 tankObjectId 处的第一个项目与原文相符objectId .如果这听起来有点复杂,请原谅我。

像往常一样感谢您提前提供的帮助。

更新

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";
photoHandler *cell = (photoHandler *)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
_tankNameArray = [_array objectAtIndex:indexPath.section * 1 + indexPath.row];
cell.tankNameLabel.text = [_tankNameArray valueForKey:@"tankName"];
cell.tankCapLabel.text = [_tankNameArray valueForKey:@"tankCapacity"];
NSArray *objectId = [_array valueForKey:@"objectId"];

for (int i = 0; i < objectId.count; i++)
{
// NSString *objectString = [[NSString alloc] init];
// objectString = [objectId objectAtIndex:i];
PFQuery *imageQuery = [PFQuery queryWithClassName:@"SavedTankImages"];
[imageQuery whereKey:@"tankObjectId" equalTo:[objectId objectAtIndex:i]];
[imageQuery getFirstObjectInBackgroundWithBlock:^(PFObject *objects, NSError *error)
{
if (!error)
{
PFFile *imageFile = [objects valueForKey:@"tankImages"];
[imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error)
{
cell.parseImage.image = [UIImage imageWithData:data];
}
}];
NSLog(@"Heres your image: %@", objects);
}
}];
}

return cell;
}

上面的代码选择第一个可用图像并将其作为 collectionView 中每个单元格的背景。 .我想要得到它,以便它只返回 objectId 的第一个图像。也就是说

  • 坦克 1 = 坦克 1 图片 1
  • 坦克 2 = 坦克 2 图片 1
  • 坦克 3 = 坦克 3 图片 1

现在这是它正在做的:

  • 坦克 1 = 坦克 1 图片 1
  • 坦克 2 = 坦克 1 图片 1
  • 坦克 3 = 坦克 1 图片 1

最佳答案

简单的解决方案,排序并只取第一个结果。请注意,这不如下一个解决方案有效:

// sort by createdAt or use updatedAt
[imageQuery orderByDescending:@"createdAt"];
// change from find to getFirst
//[imageQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
[imageQuery getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
if (!error)
{
NSLog(@"OBJECT TEST: %@", object);
}
}];

如果您经常对此进行查询,一个更高级的解决方案是存储一个指向坦克上最新对象的指针。您可以在代码中执行此操作,也可以创建 Cloud Code 方法以在保存每个 SavedTankImages 对象后自动更新它(它只会加载相关的 SavedTanks 并设置 mostRecentImage 指向保存的图像,然后保存 SavedTanks)。

如果你已经这样做了,那么你可以使用 include: 方法来加载 mostRecentImageSavedTanks

关于ios - 在 Parse iOS 中为每个对象抓取第一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23916868/

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