在許多基于網絡的應用中,會發生基于網絡的錯誤,這些錯誤與你的應用無關。然而,大多數用戶可能不知道為什么應用失敗。CFNetDiagnostics API為你提供一種快速而簡單的方法來幫助用戶解決網絡問題。
如果你的應用使用一個CFStream 對象,然后調用CFNetDiagnosticCreateWithStreams函數創建一個網絡診斷引用(CFNetDiagnosticRef) 。CFNetDiagnosticCreateWithStreams有一個分配器,讀取流和寫入流作為參數。如果你的應用只使用讀取流或寫入流,未使用的參數設置為NULL。
如果不存在流,你還可以直接從URL創建一個網絡診斷引用。要做到這一點,調用CFNetDiagnosticCreateWithURL 函數,并傳遞一個分配器,URL到CFURLRef。它將返回一個網絡診斷引用供你使用。
為了通過網絡診斷助手診斷問題,調用CFNetDiagnosticDiagnoseProblemInteractively 函數并傳遞網絡診斷引用。列表6-1展示了如何使用CFNetDiagnostics 診斷在運行循環上實現的流。
列表6-1 當發生流錯誤時使用CFNetDiagnostics API
<pre><code>
case kCFStreamEventErrorOccurred:
CFNetDiagnosticRef diagRef =
CFNetDiagnosticCreateWithStreams(NULL, stream, NULL);
(void)CFNetDiagnosticDiagnoseProblemInteractively(diagRef);
CFStreamError error = CFReadStreamGetError(stream);
reportError(error);
CFReadStreamClose(stream);
CFRelease(stream);
break;
</pre></code>
CFNetworkDiagnostics 同樣可以檢索問題的狀態,而不是使用網絡診斷助手。通過調用CFNetDiagnosticCopyNetworkStatusPassively,便可以完成。該函數返回一個常數例如kCFNetDiagnosticConnectionUp 或kCFNetDiagnosticConnectionIndeterminate。