2014-10-29 28 views
0

我在我的項目中有10個類,目前我在所有10個類的每個方法中都放置了try catch塊來捕獲異常,這似乎是一個龐大的代碼。如何在iOS應用程序中維護單個try catch塊

現在我想維護一個單一的try catch塊通過項目,意味着如果任何異常發生在我應該通過try catch塊捕獲的所有10個類中。

是否有可能做這樣的... ...

NSArray *arr=[[d1 objectForKey:@"Time"] componentsSeparatedByString:@" "]; 
NSArray *arr1=[[arr objectAtIndex:1] componentsSeparatedByString:@":"]; 

這裏我的目標「時間」是從服務的到來。 所以如果對象爲空,可能會導致 數組超出索引Exception。 我知道我可以通過比較字符串的長度來解決。所以,如果在某些情況下忘記比較長度。 在這種情況下,我想捕捉異常,我想將其發佈到我的服務器。

@catch (NSException *exception) { 

    NSString *stacktrace=[exception.reason stringByReplacingOccurrencesOfString:@"<" withString:@""]; 

    stacktrace=[stacktrace stringByReplacingOccurrencesOfString:@">" withString:@""]; 


    // NSString *strClass = NSStringFromClass([self class]); 
    NSString *strClass = [NSString stringWithFormat:@"%@ : %@",NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; 
    Item* myStore = [Item sharedStore]; 
    myStore.strErrorDescription=exception.name; 
    myStore.strErrorStack=stacktrace; 
    myStore.strErrorPageName=strClass; 
     [myStore PostError];// To Post the exception to My server. 
     ErrorView *errorView=[[ErrorView alloc]initWithNibName:@"ErrorView" bundle:nil]; [self presentViewController: errorView animated:NO completion:nil]; 

} 

謝謝。

+2

你確定你正在使用try-catch塊嗎?它們用於iOS編程,但很少,我仍然沒有在Objective-C中編寫過一個。 – DBoyer 2014-10-29 05:30:29

+0

你可以做到這一點,但如果你只是調試代碼,你可能只想打開一個異常斷點。 – 2014-10-29 05:33:29

+0

@DBoyer謝謝reply.is,這不是使用try catch塊的好方法 – siva 2014-10-29 05:33:36

回答

0

這裏真正的答案是你做錯了。

Objective-C中的異常與Java或Ruby等其他語言中的異常不同。特別是,它們往往是「不可恢復的」,這意味着一旦某些代碼拋出異常,關於內存分配狀態的一些假設就會變成錯誤,並且您的程序可能正在崩潰。

總體方法Apple recommends是將異常視爲程序員錯誤的症狀。你給的例子與他們做的是一樣的:忽略檢查一個NSArray的長度。您應該致力於在開發過程中發現並消除這些問題;最好的辦法就是讓程序因異常而崩潰,然後找到並修復有問題的代碼。

+0

那麼我該如何向用戶展示一些其他視圖,當發生崩潰時,是不是冒險/ – siva 2014-10-29 06:41:20

+0

這是一個很不錯的閱讀,如果你想要更多的細節:http://club15cc.com/code/objective-c/dispelling- nsexception-myths-in-ios-can-we-use-try-catch-finally – 2014-10-29 07:26:06

+0

亞倫,有趣的文章,謝謝!我想我只是傳播教條。 :)儘管Swift沒有異常機制這一事實是Apple在這裏的想法。 – dpassage 2014-10-30 19:13:03