Ios NSMutableArray中的对象
我有一个tableview,其中包含图像列表和图像缩略图(图像列表和缩略图是从JSON对象解析的),我将图像数据对象添加到imagesArray中,如下所示-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]; [
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];