2011-12-22 7 views
0

ELCImagePickerControllerを使用していますので、複数の写真を選択してインポートできます。私はいくつかの写真を選択するとうまくいきますが、約25を超えて選択するとクラッシュします。ここで私は写真を選択して行わヒットした後に実行されるコードだ:選択後にUIImagePickerがクラッシュする

-(void)selectedAssets:(NSArray*)_assets { 
    NSMutableArray *returnArray = [[NSMutableArray alloc] init]; 
    int count=0; 
    for(ALAsset *asset in _assets) { 
     NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init]; 
     [workingDictionary setObject:[asset valueForProperty:ALAssetPropertyType] forKey:@"UIImagePickerControllerMediaType"]; 

     UIImage *image=[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]; 
     [workingDictionary setObject:image forKey:@"UIImagePickerControllerOriginalImage"]; 
     [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:@"UIImagePickerControllerReferenceURL"]; 

     NSLog(@"%i", count); 
     count++; 

     [returnArray addObject:workingDictionary]; 
    } 
    [self popToRootViewControllerAnimated:NO]; 
    [[self parentViewController] dismissModalViewControllerAnimated:YES]; 

    if([delegate respondsToSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:)]) { 
     [delegate performSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:) withObject:self withObject:[NSArray arrayWithArray:returnArray]]; 
    } 
} 

私は80枚の写真を選択し、のNSLog文は45まで表示しますが、それは単にメッセージなし、ただ(gdb)でクラッシュ。

私が選んだ画像は、リアカメラで撮影したiPhone 4の画像です。インポート時に画像のサイズを変更しようとしましたが、それでもアプリがクラッシュします。何が問題になるのだろうか?

+0

RAMを使いすぎている可能性があります。アクティビティモニタツールでコードのこの部分をプロファイリングしましたか? – Eugene

+0

私は今インストゥルメンツでリークテンプレートを使用しており、合計割り当ては決して3.76 MBを超えていません。または、別のテンプレートを使用する必要がありますか? – Snowman

+0

80イメージを選択してRAMにロードすると、その使用量は〜4MBのようになります。 Activity Monitorの計測器を使用してみてください。実際のメモリ使用量の統計情報が表示されます。 – Eugene

答えて

2

あなたが気にしないなら、私は答えとしてそれを入れます。

この問題を解決する方法はほとんどありません。まず、ユーザーが5枚以上の写真を選択するのを制限することができます。次に、イメージをサイズ変更して配列に入れる前に、イメージを小さくすることができます。または、それらをすべて元のサイズにする必要がある場合は、選択時に〜/ tmpディレクトリにコピーして、それらのリンクをNSArrayに格納して、それらをすべてメモリに保存するのではなくディスクから動的にロードすることができます。

申し訳ありませんが、このような量の画像を同時に使用することの最終的な目標を実際には分かっていないため、役に立たない場合は、

関連する問題