我有一個方法,需要一個(NSError **),但我不想傳遞一個。當我通過它「無」或「空」我最終與「EXC_BAD_ACCESS」。如何通過相當於零(NSError **)
違規行是「* error = nil;」
如何在沒有崩潰的情況下將「無」等價於它?
我有一個方法,需要一個(NSError **),但我不想傳遞一個。當我通過它「無」或「空」我最終與「EXC_BAD_ACCESS」。如何通過相當於零(NSError **)
違規行是「* error = nil;」
如何在沒有崩潰的情況下將「無」等價於它?
出錯的行應該是:
if (error != nil) { *error = nil; }
你試圖取消引用空指針,這是一個崩潰的好辦法。
另一種方法是將它傳遞給NSError**
,但之後就忽略它。
我可能會使用替代方法,因爲違規行不在我的代碼中,所以我不想惹它。感謝戴夫的幫助! – 2010-03-23 18:28:08
您必須將它傳遞給它可以修改的有效指針。做到這一點的標準方法是:
NSError *error = nil;
[object callMethod:whatever error:&error];
當你實現這樣的方法,你可以使用下面的技巧,這樣你就不必檢查nil
所有的時間:
- (void) doSomethingMaybeCausing: (NSError**) error
{
NSError *dummyError = nil;
if (error == NULL)
error = &dummyError;
// ...later:
*error = [NSError …];
}
現在,如果調用者對錯誤不感興趣,現在可以通過NULL
。
天才。謝謝你的訣竅! – 2010-03-23 18:32:56
你正在實施該方法還是你打電話給它? – 2010-03-23 18:18:31