我有一個錯誤得到通過引用我在網上找到的一些代碼。錯誤以空白對象的形式返回,這意味着沒有錯誤。ios檢查一個空對象
如果我檢查error.code
我得到一個錯誤訪問,因爲該對象是空的。
如果我檢查error == nil
我得到一個錯誤,因爲error
是一個空對象。
如何使用邏輯來發現錯誤存在但是空的?
我有一個錯誤得到通過引用我在網上找到的一些代碼。錯誤以空白對象的形式返回,這意味着沒有錯誤。ios檢查一個空對象
如果我檢查error.code
我得到一個錯誤訪問,因爲該對象是空的。
如果我檢查error == nil
我得到一個錯誤,因爲error
是一個空對象。
如何使用邏輯來發現錯誤存在但是空的?
錯誤通常是類型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如果沒有錯誤,並且該方法的行爲不如預期,那麼使用此方法實現時會出現問題。特別是如果它是一個開源的東西,編碼錯誤可以很容易地出現,所以你可以看看這個方法的作用,調試,甚至修復,如果出了什麼問題......
'如果(錯誤)'不是大多數Apple API的設計方式。大多數Apple API返回一個'BOOL'來表示是否發生了錯誤。無法保證成功時錯誤指針將爲「無」。 – Jim
有趣的是,你有沒有發現這種情況 - 成功,但錯誤是初始化的,反之呢?蘋果建議如何使用異步方法。 ' - (void)DoSomeStuffAsync:(void(^)(NSError * error))completionBlock',我可以看到例如我的異步方法在某個點失敗了嗎? – graver
我沒有親自捕捉過,因爲我遵循API並檢查返回值。 [這裏有更多關於這個錯誤的細節](http://rentzsch.tumblr.com/post/260201639/nserror-is-hard),包括官方文檔的鏈接。 – Jim
你錯誤地診斷了這個問題。沒有「空洞的對象」這樣的東西。我懷疑你沒有正確地檢查成功,並且正在引用一個懸掛指針。發佈您正在使用的代碼,也許有人可以提供幫助。 – Jim