У меня возникли некоторые проблемы с данными, возвращаемыми CNCopyCurrentNetworkInfo, и мне было интересно, что я делаю что-то не так.
Я использую следующий код для отображения BSSID подключенной в данный момент точки доступа:
NSArray* interfaces = (NSArray*) CNCopySupportedInterfaces();
for (NSString* interface in interfaces) {
CFDictionaryRef networkDetails = CNCopyCurrentNetworkInfo((CFStringRef) interface);
if (networkDetails) {
NSLog(@"all details: %@", (NSDictionary *)networkDetails);
NSLog(@"BSSID: %@", (NSString *)CFDictionaryGetValue (networkDetails, kCNNetworkInfoKeyBSSID));
CFRelease(networkDetails);
}
}
При просмотре операторов NSLog создается впечатление, что CNCopyCurrentNetworkInfo зависает на старых данных для kCNNetworkInfoKeyBSSID при определенных обстоятельствах.
У меня настроены две точки доступа, и я пытаюсь получитьBSSID текущей подключенной точки доступа.Если я запускаю только одну включенную точку доступа, она возвращает правильный BSSID.Если я выключаю эту точку доступа, я не получаю BSSID (правильно), и когда я включаю вторую точку доступа и подключаюсь к ней, мне дают правильный BSSID второй точки доступа.
Однако, если я начинаю с одной включенной точкой доступана запустить этот код, и мне правильно дали BSSID этого AP.Затем я включаю вторую точку доступа, затем выключаю первую (заставляя устройство переходить на вторую точку доступа) операторы журнала по-прежнему возвращают BSSID первой точки доступа (которую я отключил и, возможно, не подключен).
Кто-нибудь имеет больше опыта с этим, чем я?Должен ли я вручную сбрасывать значения, возвращаемые CNCopyCurrentNetworkInfo между вызовами?
Я выполнял это как на iPod touch 4-го поколения под управлением iOS 4.3, созданной с использованием Xcode 4, так и на iPhone 4 под управлением iOS 4.1, построенной с использованием Xcode3.2.4