2012-01-26 74 views
0

我想嘗試使用NSdata創建圖像。如果imageWithData:UIImage的方法可以成功創建它,我將遵循一個路徑,但如果它不能創建我想要按照另一種方式。如何捕捉imageWithData引發的異常:iPhone

這甚至可能嗎?

我試圖

@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

您會收到錯誤消息,因爲im仍然爲nil,並且您不允許將nil添加到數組中。

你可以那樣做:

im = [UIImage imageWithData:data]; 

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

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

類似的模式的實現上面會重新寫finally塊像這樣:

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

但是整個代碼塊很容易被重寫(而且應該)不需要異常處理。

+1

@ harakiri的代碼片段是一個完美的例子,不需要使用異常就可以重寫。 – Damien

+0

謝謝你的回答。凱文的問題後,我意識到,我正在試圖建立的形象是零,我只用'如果'塊。 – gurkan