2

我有一个表格视图,其中包含图像列表和图像缩略图(图像列表和缩略图是从 JSON 对象解析的),我正在像这样将图像数据对象添加到 imagesArray -

ImageData *imageDataObject = [[ImageData alloc]initWithImageId:[[imageListArray    
                         objectAtIndex:indexPath.row] imageId] imageData:imageData];
[imagesArray addObject:imageDataObject];

图像数据对象

@property (nonatomic, strong) NSString* imageId;
@property (nonatomic, strong) NSData* imageData;

allImagesArray 像这样

[ImageData object1,ImageData object2,....]

我想根据 selectedImageId 将此数组中对象的 imageData 分配给

UIImage* image =[[UIImage alloc] initWithData:........];

我想不出一种基于 selectedImageId 获取该 imageData 的方法

请帮忙。

更新 - 谢谢大家的帮助,我可以做到。

4

3 回答 3

1

所以你有了:

NSArray* allImagesArray = @[@{@"some_image_id_in_NSString_1":@"the data in NSData 1"}, @{@"some_image_id_in_NSString_2":@"the data in NSData 2"}];

作为PPImageViewController的属性。

假设imageidis an NSStringand imagedatais NSData,您可以在以下位置创建类似这样的方法PPImageViewController

- (UIImage*) findSelectedImage
{
    UIImage* selectedImage;

    for(NSDictionary* d in allImagesArray)
    {
        NSString* currentKey = [[d allKeys] objectAtIndex:0];

        if([currentKey isEqualToString:[self selectedImageId]])
        {
            NSData* imageData = [d objectForKey:currentKey];

            selectedImage = [UIImage imageWithData:imageData];

            break;
        }
    }

    return selectedImage;
}

然后像这样调用它,也许在你的viewDidLoad方法上:

UIImage* selectedImage = [self findSelectedImage];

希望它有所帮助。

于 2013-11-12T04:07:35.683 回答
1

一种可能的方法是遍历数组,selectedImageId从字典中找到并使用它。

例子:

    ImageData *imageDataObject = nil;

    for(int i=0; i<allImagesArray.count;i++){
        NSDictionary *dict= allImagesArray[i];
        imageDataObject = [dict objectForKey:selectedImageId];
        if(imageDataObject != nil){
           UIImage* image =[[UIImage alloc] initWithData:........];
           //do whatever
           break;
        }
    }

根据您的编辑

你所拥有的是一个 ImageData 对象数组 [ImageData1,ImageData2,...]。对于每个 ImageData 对象,您拥有imageIdimageData属性,您想要的只是将其selectedImageId与 this进行比较imageId并从中获取imageData

因此,为此,在您的 中PPImageViewController,您可以像这样迭代allImagesArray并获取 imageData。

    for(ImageData* imgDataObj in self.allImagesArray){
        if([imgDataObj.imageId isEqualToString:self.selectedImageId]){
           UIImage* image =[[UIImage alloc] initWithData:imgDataObj.imageData];
        }
    }
于 2013-11-12T03:55:14.430 回答
1

我看到您正在将 ImageData 对象直接添加到数组中。您可以改用 NSDictionary。键可以是 imageID(假设它是唯一的),值是 imageData 对象。然后将字典而不是数组传递给 PPImageViewController。

NSMutableDictionary *imageData = [NSMutableDictionary dictionary];

ImageData *imageDataObject = [[ImageData alloc]initWithImageId:[[imageListArray    
                         objectAtIndex:indexPath.row] imageId] imageData:imageData];

[imageData setObject:imageDataObject forKey:imageId];

然后在 PPImageViewController 中,您可以轻松地根据选定的 imageID 获取 imageDataObject,如下所示:

ImageData *imageDataObject = allImagesDictionary[selectedImageID];

编辑:

NSArray *imageIndexes = [allImagesDictionary allKeys];

// Now use imageIndexes to populate your table. This will guarantee the order 

// Fetch the imageId
selectedImageID = imageIndexes[indexPath.row];

// Fetch the imageData
ImageData *imageDataObject = allImagesDictionary[selectedImageID];
于 2013-11-12T03:55:32.413 回答