2014-07-01 86 views
0

我沿着的ObjectiveC錯誤處理void函數

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

如果函數導致錯誤行的功能,我怎麼檢查發生了錯誤?蘋果建議檢查返回值爲零,但顯然我不能這樣做。我目前只是檢查錯誤值是不是零,但似乎是皺眉。

+0

澄清:你是否從功能的內部或外部「檢查」?你是這個函數的調用者還是實現者(作者)? – matt

+3

如果你是調用者,那麼作者應該返回一個BOOL,以便知道是否發生錯誤。 – matt

+3

如果你是作者,那就照我剛剛說的去做吧。返回BOOL,不是void,表示事情是否順利。 – matt

回答

3

你們混淆的原因是提供這種方法的人寫錯了。蘋果是正確的:你不應該檢查NSError指針的值,除非事先知道指針的另一端有一個NSError。該方法應該返回告訴你這一點。

正確的約定,如果方法不返回東西有或無作爲的事情是否順利的指標,是返回一個BOOL,像這樣:

- (BOOL)doSomeFunctionWithError:(NSError **)error; 

這樣的話,你有什麼去檢查。看,例如,在NSFileManager;它的很多方法都有這種模式(見例如linkItemAtURL:...)。