我試圖讓AWS S3從S3存儲桶中獲取圖像,下面的代碼分爲兩部分。第一個(我認爲)在啓動數組以將對象放入(arrayImages,它從arrayPointer中獲得計數)之後創建get對象請求。第二種是委託方法,一旦它完成,將對象(數據)放入arrayImages中。我會假設每次調用委託方法時都會添加一個新對象。什麼是錯在這裏:通過委託方法將UIImage添加到NSMutableArray S3
-(void)gets3ImageArray
{
if (arrayImages == nil) {
arrayImages = [[NSMutableArray alloc] initWithCapacity:[arrayPointer count]];
}
else
{
[arrayImages removeAllObjects];
}
AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY_ID withSecretKey:SECRET_KEY];
for (NSString *name in arrayPointer){
@try {
S3GetObjectRequest *gor = [[S3GetObjectRequest alloc]initWithKey:name withBucket:[Constants pictureBucket]];
[gor setDelegate:self];
[s3 getObject:gor];
}
@catch (AmazonClientException *exception) {
[Constants showAlertMessage:exception.message withTitle:@"Download Error"];
}
}
}
-(void)request:(AmazonServiceRequest *)request didReceiveData:(NSData *)data
{
UIImage *myImage = [[UIImage alloc] initWithData:data];
if(!myImage)
{
NSLog(@"NO IMAGE");
[arrayImages addObject:[UIImage imageNamed:@"placeholder.png"]];
}
else
{
[arrayImages addObject:[UIImage imageWithData:data]];
}
如果您多次調用[self gets3ImageArray],它永遠不會超過您設置的初始容量。可能想檢查一下。委託方法實際上是否返回KindOfClass UIImage的數據?你已經有了myImage,所以只需添加它,而不是從imageWithData創建另一個圖像。首先檢查是否返回圖像。 –
圖像被返回,當有多個圖像時,我會得到問題。我拿出initWithCapacity並仍然崩潰。崩潰往往發生在較大的圖像上。 – Eric
我不熟悉亞馬遜的這些委託方法,還有更多嗎?很可能您只使用返回數據的第一遍,而不是整個流。因此較小的文件工作。 –