Ios NSMutableArray中的对象

Ios NSMutableArray中的对象,ios,uiimage,nsmutablearray,nsdictionary,Ios,Uiimage,Nsmutablearray,Nsdictionary,我有一个tableview,其中包含图像列表和图像缩略图(图像列表和缩略图是从JSON对象解析的),我将图像数据对象添加到imagesArray中,如下所示- ImageData *imageDataObject = [[ImageData alloc]initWithImageId:[[imageListArray objectAtIndex:indexPath.row] imageId] imageData:imageData]; [

我有一个tableview,其中包含图像列表和图像缩略图(图像列表和缩略图是从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;
就像这样

[ImageData object1,ImageData object2,....]
我想根据selectedImageId将此数组中对象的imageData分配给

UIImage* image =[[UIImage alloc] initWithData:........];
我想不出基于selectedImageId获取图像数据的方法

请帮忙

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

一种可能的方法是,遍历数组,从字典中找到您的
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对象直接添加到数组中。你可以用字典来代替。键可以是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* 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];

希望有帮助。

您应该使用一个字典并将所有图像添加到其中:
{imageid:imagedata,imageid2:imagedata2,…}
是,我做了同样的事情,但我还必须实现滑动手势,所以使用了NSArray,因为用户可以从列表中选择任何图像,所以selectedImageId可以是任何图像,所以知道图像索引很难。您可以通过[imageData allKeys]获得键数组,并使用它来确保索引正确。这将确保从正确的位置拾取对象,当出现滑动手势时,返回的索引可直接用于首先从[imageData allKeys]获取对象,该索引可用于获取imageData。这是抛出错误-[imageData allKeys]:发送到实例0x10901cc80的未识别选择器由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[ImageData allKeys]:发送到实例0x10901cc80的未识别选择器'在我的代码中的位置
[ImageData allKeys]
?你是说
[d所有键]
?如果这是真的,那么allImagesArray可能不包含任何NSDictionary对象。我非常抱歉数组中有ImageData对象,更新了问题我非常抱歉数组中有ImageData对象,更新了问题
- (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;
}
UIImage* selectedImage = [self findSelectedImage];