Pergunta

Estou atualmente usando este código

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

Para recuperar meu endereço IP para um aplicativo de rede em que estou trabalhando, no entanto, estou ciente de que o NSHOST é uma API privada que será rejeitada. Alguém pode me ajudar a trabalhar neste código para produzir os mesmos resultados sem usar o NSHOST? Não tenho muita certeza de por onde começar.

EDITAR:

Seguindo sugestões que parecem quase perfeitas abaixo, adicionei esse código ao meu aplicativo no lugar do código acima

    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");
}

Eu removi a quarta linha (como já tenho essas informações de outros lugares), mas recebo erros baseados no CFHOSTREF sendo não declarado. Como eu resolveria isso? Parece ser o meu único grande obstáculo, pois outros erros são baseados apenas na falta de poder ver Hostref depois disso. EDIT: Screque que eu também recebo Kcfhostaddresses não declarados.

Foi útil?

Solução 3

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

Recebi uma ótima resposta através do sistema de suporte ao desenvolvedor, isso funcionou perfeitamente.

Outras dicas

Você pode usar o CFHost para alcançar o mesmo. No topo do Referência do CFHost é uma receita de livro de receitas para fazer a pesquisa.

O código a seguir faz muito, Resolução síncrona muito básica (Como o seu acima faria com Nshost). Observe que Você não quer fazer isso, pois pode renderizar seu aplicativo sem resposta Porque não retorna até que seja resolvido ou o tempo limite chegue.

Use uma pesquisa assíncrona em vez disso (CFHostSetClient e CfHostschedulewithrunloop, conforme descrito na documentação do CFHost acima). Além disso, dependendo do que você planeja fazer, convém usar as APIs de acessibilidade. Confira as sessões da WWDC em rede disponíveis no site do iPhone Developer.

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top