ฉันค้นหาในหัวข้อนี้ แต่พบรายละเอียดน้อยมากซึ่งเป็นประโยชน์ ด้วยรายละเอียดเหล่านี้ฉันได้ลองทำโค้ดบางส่วนดังนี้
หมายเหตุ: โปรดเปรียบเทียบรายละเอียดที่แชร์ในโพสต์นี้กับโพสต์อื่นก่อนที่จะทำเครื่องหมายว่า DUPLICATE ไม่ใช่เฉพาะเรื่อง
- (NSArray *)getDataCountersForType:(int)type {
    BOOL success;
    struct ifaddrs *addrs = nil;
    const struct ifaddrs *cursor = nil;
    const struct sockaddr_dl *dlAddr = nil;
    const struct if_data *networkStatisc = nil; 
    int dataSent = 0;
    int dataReceived = 0;
    success = getifaddrs(&addrs) == 0;
    if (success) {
        cursor = addrs;
        while (cursor != NULL) {
            if (cursor->ifa_addr->sa_family == AF_LINK) {
                dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
                networkStatisc = (const struct if_data *) cursor->ifa_data;
                if (type == WiFi) {
                    dataSent += networkStatisc->ifi_opackets;
                    dataReceived += networkStatisc->ifi_ipackets;   
                }
                else if (type == WWAN) {
                    dataSent += networkStatisc->ifi_obytes;
                    dataReceived += networkStatisc->ifi_ibytes; 
                }
            }
            cursor = cursor->ifa_next;
        }
        freeifaddrs(addrs);
    }       
    return [NSArray arrayWithObjects:[NSNumber numberWithInt:dataSent], [NSNumber numberWithInt:dataReceived], nil];    
}
รหัสนี้รวบรวมข้อมูลการใช้อินเทอร์เน็ตของอุปกรณ์ iPhone (ไม่ใช่แอปพลิเคชันของฉันคนเดียว)
ตอนนี้ถ้าผมใช้อินเทอร์เน็ตผ่าน WiFi หรือผ่าน 3G, ฉันได้รับข้อมูล (ไบต์) เฉพาะในifi_obytes(ส่ง) และifi_ibytes(ที่ได้รับ) แต่ผมคิดว่าผมควรจะได้รับการใช้งานอินเตอร์เน็ตไร้สายในและifi_opacketsifi_ipackets
นอกจากนี้ยังต้องการเพิ่มว่าถ้าฉันเชื่อมต่อกับเครือข่าย WiFi แต่ผมไม่ได้ใช้อินเทอร์เน็ตผมยังคงได้รับมูลค่าเพิ่มให้กับและifi_obytesifi_ibytes
อาจเป็นฉันผิดในการใช้งานหรือความเข้าใจ ต้องการใครสักคนที่จะช่วยฉันออก
แก้ไข: แทนที่จะAF_LINKลองAF_INET( sockaddr_inแทนsockaddr_dl) แอปพลิเคชันขัดข้อง