2010-03-23 67 views
0

我有一個方法,需要一個(NSError **),但我不想傳遞一個。當我通過它「無」或「空」我最終與「EXC_BAD_ACCESS」。如何通過相當於零(NSError **)

違規行是「* error = nil;」

如何在沒有崩潰的情況下將「無」等價於它?

+1

你正在實施該方法還是你打電話給它? – 2010-03-23 18:18:31

回答

3

出錯的行應該是:

if (error != nil) { *error = nil; } 

你試圖取消引用空指針,這是一個崩潰的好辦法。

另一種方法是將它傳遞給NSError**,但之後就忽略它。

+0

我可能會使用替代方法,因爲違規行不在我的代碼中,所以我不想惹它。感謝戴夫的幫助! – 2010-03-23 18:28:08

1

您必須將它傳遞給它可以修改的有效指針。做到這一點的標準方法是:

NSError *error = nil; 
[object callMethod:whatever error:&error]; 
3

當你實現這樣的方法,你可以使用下面的技巧,這樣你就不必檢查nil所有的時間:

- (void) doSomethingMaybeCausing: (NSError**) error 
{ 
    NSError *dummyError = nil; 
    if (error == NULL) 
     error = &dummyError; 
    // ...later: 
    *error = [NSError …]; 
} 

現在,如果調用者對錯誤不感興趣,現在可以通過NULL

+0

天才。謝謝你的訣竅! – 2010-03-23 18:32:56

相關問題