2012-01-26 19 views
0

NSdataを使用してイメージを作成します。 UIImageのimageWithData:メソッドがそれを正常に作成できる場合、私はパスに従いますが、作成できない場合は別の方法に従いたいと思います。imageWithDataによってスローされた例外をキャッチする方法:

これも可能ですか?

私は

@try { 
     im = [UIImage imageWithData:data]; 
     NSLog(@"Trying"); 
    } 
    @catch (NSException * e) { 
     NSLog(@"Exception");  
     anotherData = doSomethingWithData(data) 
     im = [UIImage imageWithData:anotherData]; 
    } 
    @finally { 
     NSLog(@"Final"); 
     [self.questionList addObject:im]; 
    } 

を試してみましたが、それはアプリがクラッシュする原因となります。

アプリをクラッシュさせることなくこの例外をキャッチするにはどうすればよいですか?

例外はこれです:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0' 

コードデータから画像を作成しませんが、それでも、それはそれについて例外か何かをスローしません。イメージが作成されたかどうかを私が理解できる方法はありますか?

+0

スローされているエラーは何ですか? – Kevin

+0

'NSInvalidArgumentException'を捕まえることができません。 – basvk

答えて

2

imnilのままであり、配列にnilを追加することはできません。あなたはそのようにそれを行うことができ

:コードの

@finally { 
    NSLog(@"Final"); 
    if(im) { 
     [self.questionList addObject:im]; 
    } 
} 

しかし作品全体:

im = [UIImage imageWithData:data]; 

if(im == nil) { 
    anotherData = doSomethingWithData(data) 
    im = [UIImage imageWithData:anotherData]; 
} 

if(im != nil) 
    [self.questionList addObject:im]; 
0

を上記のあなたのパターンに似た実装では、再書き込みなどのように、最終的にブロックするようになります例外処理を必要としないように簡単に書き直すことができます。

+1

@ harakiriのコードスニペットは、例外を使用しないでリライトした例です。 – Damien

+0

あなたの答えをありがとう。 Kevinの質問の後、私が構築しようとしているイメージは無限であることがわかりました。 – gurkan

関連する問題