我有一个tableview,其中包含图像列表和图像缩略图(图像列表和缩略图都是从JSON对象中解析出来的),我正在将图像数据对象添加到imagesArray中,如下所示 -
ImageData *imageDataObject = [[ImageData alloc]initWithImageId:[[imageListArray
objectAtIndex:indexPath.row] imageId] imageData:imageData];
[imagesArray addObject:imageDataObject];
ImageData对象
@property (nonatomic, strong) NSString* imageId;
@property (nonatomic, strong) NSData* imageData;
像这样的allImagesArray
[ImageData object1,ImageData object2,....]
我想根据selectedImageId将对象的imageData分配给
UIImage* image =[[UIImage alloc] initWithData:........];
我无法想到基于selectedImageId获取该imageData的方法
请帮忙。
更新 - 谢谢大家的帮助,我能做到。
答案 0 :(得分: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对象,您拥有imageId
和imageData
属性,您想要的只是将selectedImageId
与此imageId
进行比较,然后从中获取imageData
。
因此,在您的PPImageViewController
中,您可以像这样迭代allImagesArray
并获取imageData。
for(ImageData* imgDataObj in self.allImagesArray){
if([imgDataObj.imageId isEqualToString:self.selectedImageId]){
UIImage* image =[[UIImage alloc] initWithData:imgDataObj.imageData];
}
}
答案 1 :(得分:1)
我看到你正在将ImageData对象直接添加到Array中。您可能只是使用了NSDictionary。键可以是imageID(假设它是唯一的),value将是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];
答案 2 :(得分: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的属性。
假设imageid
是NSString
且imagedata
是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];
希望有所帮助。