NSMutableArray中的对象

时间:2013-11-12 03:34:11

标签: ios uiimage nsmutablearray nsdictionary

我有一个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的方法

请帮忙。

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

3 个答案:

答案 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对象,您拥有imageIdimageData属性,您想要的只是将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的属性

假设imageidNSStringimagedataNSData,您可以在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];

希望有所帮助。