2012-06-04 51 views
0

我有一個錯誤得到通過引用我在網上找到的一些代碼。錯誤以空白對象的形式返回,這意味着沒有錯誤。ios檢查一個空對象

如果我檢查error.code我得到一個錯誤訪問,因爲該對象是空的。

如果我檢查error == nil我得到一個錯誤,因爲error是一個空對象。

如何使用邏輯來發現錯誤存在但是空的?

+0

你錯誤地診斷了這個問題。沒有「空洞的對象」這樣的東西。我懷疑你沒有正確地檢查成功,並且正在引用一個懸掛指針。發佈您正在使用的代碼,也許有人可以提供幫助。 – Jim

回答

7

錯誤通常是類型NSError或它的一個子類。他們在方法的引用通過這種方式聲明:

-(void)DoSomeStuff:(NSError **)error; 

所以,當你調用需要你一個參考傳遞給NSError的方法調用這種方式:

NSError *error = nil; 
[self DoSomeStuff:&error]; 

當這方法完成了它的工作,您檢查錯誤對象是否實際上已經裝滿了東西:

if(error) 
{ 
    //Do some stuff if there is an error. 
    //To see the human readable description you can: 
    NSLog(@"The error was: %@", [error localizedDescription]); 
    //To see the error code you do: 
    NSLog(@"The error code: %d", error.code); 
} 
else //There is no error you proceed as normal 
{ 
    //Do some other stuff - no error 
} 

PS如果沒有錯誤,並且該方法的行爲不如預期,那麼使用此方法實現時會出現問題。特別是如果它是一個開源的東西,編碼錯誤可以很容易地出現,所以你可以看看這個方法的作用,調試,甚至修復,如果出了什麼問題......

+0

'如果(錯誤)'不是大多數Apple API的設計方式。大多數Apple API返回一個'BOOL'來表示是否發生了錯誤。無法保證成功時錯誤指針將爲「無」。 – Jim

+0

有趣的是,你有沒有發現這種情況 - 成功,但錯誤是初始化的,反之呢?蘋果建議如何使用異步方法。 ' - (void)DoSomeStuffAsync:(void(^)(NSError * error))completionBlock',我可以看到例如我的異步方法在某個點失敗了嗎? – graver

+0

我沒有親自捕捉過,因爲我遵循API並檢查返回值。 [這裏有更多關於這個錯誤的細節](http://rentzsch.tumblr.com/post/260201639/nserror-is-hard),包括官方文檔的鏈接。 – Jim