在許多基于網(wǎng)絡(luò)的應(yīng)用中嘀粱,會(huì)發(fā)生基于網(wǎng)絡(luò)的錯(cuò)誤嚣镜,這些錯(cuò)誤與你的應(yīng)用無(wú)關(guān)爬迟。然而,大多數(shù)用戶可能不知道為什么應(yīng)用失敗菊匿。CFNetDiagnostics API為你提供一種快速而簡(jiǎn)單的方法來(lái)幫助用戶解決網(wǎng)絡(luò)問(wèn)題付呕。
如果你的應(yīng)用使用一個(gè)CFStream 對(duì)象,然后調(diào)用CFNetDiagnosticCreateWithStreams函數(shù)創(chuàng)建一個(gè)網(wǎng)絡(luò)診斷引用(CFNetDiagnosticRef) 跌捆。CFNetDiagnosticCreateWithStreams有一個(gè)分配器徽职,讀取流和寫(xiě)入流作為參數(shù)。如果你的應(yīng)用只使用讀取流或?qū)懭肓髋搴瘢词褂玫膮?shù)設(shè)置為NULL姆钉。
如果不存在流,你還可以直接從URL創(chuàng)建一個(gè)網(wǎng)絡(luò)診斷引用。要做到這一點(diǎn)潮瓶,調(diào)用CFNetDiagnosticCreateWithURL 函數(shù)陶冷,并傳遞一個(gè)分配器,URL到CFURLRef毯辅。它將返回一個(gè)網(wǎng)絡(luò)診斷引用供你使用埃叭。
為了通過(guò)網(wǎng)絡(luò)診斷助手診斷問(wèn)題,調(diào)用CFNetDiagnosticDiagnoseProblemInteractively 函數(shù)并傳遞網(wǎng)絡(luò)診斷引用悉罕。列表6-1展示了如何使用CFNetDiagnostics 診斷在運(yùn)行循環(huán)上實(shí)現(xiàn)的流赤屋。
列表6-1 當(dāng)發(fā)生流錯(cuò)誤時(shí)使用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 同樣可以檢索問(wèn)題的狀態(tài),而不是使用網(wǎng)絡(luò)診斷助手壁袄。通過(guò)調(diào)用CFNetDiagnosticCopyNetworkStatusPassively类早,便可以完成。該函數(shù)返回一個(gè)常數(shù)例如kCFNetDiagnosticConnectionUp 或kCFNetDiagnosticConnectionIndeterminate嗜逻。