Вопрос

Я сейчас использую этот код

    NSHost *host = [NSHost hostWithAddress:hostname];
if (host == nil) {
    host = [NSHost hostWithName:hostname];
    if (host == nil) {
        [self setMessage:@"Invalid IP address or hostname:"];
        return;
    }
}

Чтобы извлечь мой IP-адрес для сетевого приложения, над которым я работаю, однако я знаю, что Nshost является частным API, который будет отклонен. Может кто-нибудь помочь мне с работать в этом коде, чтобы произвести те же результаты, не используя Nshost? Я не совсем уверен, с чего начать.

РЕДАКТИРОВАТЬ:

Следующие предложения, которые кажутся чертовски рядом с совершенным ниже, я добавил этот код в мое приложение в месте кода выше

    Boolean result;
CFHostRef hostRef;
CFArrayRef addresses;
NSString *hostname = @"www.apple.com";
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
}
if (result == TRUE) {
    NSLog(@"Resolved");
} else {
    NSLog(@"Not resolved");
}

Я удалил 4-е строку (так как у меня уже есть эта информация из других точек), но я получаю ошибки, основанные на CFHOSTREF, не пренебреженным. Как бы я решить это? Похоже, мое единственное большое препятствие, так как другие ошибки основаны только на отсутствии возможности видеть Hostref после этого. Редактировать: царапайте, что я также получаю kcfhostddresses dendeclared.

Это было полезно?

Решение 3

http://developer.apple.com/iphone/library/qa/qa2009/qa1652.html.

Получил большой маленький ответ через систему поддержки разработчиков, это работало прекрасно.

Другие советы

Вы можете использовать CFHost для достижения того же. На вершине Справочник CFHOST. Является ли рецепт поваренной книги для того, чтобы сделать поиск.

Следующий код делает очень, Очень основное синхронное разрешение (Как у вас выше будет с Nshost). Обратите внимание, что Вы не хотите делать это, так как оно может сделать ваше приложение без ответа Потому что он не возвращается, пока он не будет не решен, или время тайм-аута.

Вместо этого используйте асинхронный поиск (Cfhostsetclient и cfhostschedulewithrunloop, как описано в документации CFHOST выше). Также, в зависимости от того, что вы планируете делать, вы можете захотеть посмотреть использование API на достижимости. Проверьте сеансы WWDC по сети, доступные на веб-сайте разработчика iPhone.

Boolean result;
CFHostRef hostRef;
CFArrayRef addresses;
NSString *hostname = @"www.apple.com";
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
}
if (result == TRUE) {
    NSLog(@"Resolved");
} else {
    NSLog(@"Not resolved");
}

// Don't forget to release hostRef when you're done with it
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top