Domanda

Attualmente sto usando questo codice

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

per retrive il mio indirizzo IP per un'applicazione di rete su cui sto lavorando, però mi rendo conto che NSHost è un'API privata che verrà rifiutato. Qualcuno può aiutarmi con questo codice di lavoro per produrre gli stessi risultati senza usare NSHost? In realtà non sono sicuro da dove cominciare.

EDIT:

A seguito di suggerimenti che sembrano dannatamente vicino perfetto sotto Ho aggiunto questo codice nella mia app al posto del codice di cui sopra

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

Ho rimosso la linea 4 (come ho queste informazioni da qualche altra parte già) ma ottengo gli errori in fase basati su CFHostRef essere sommerso. Come faccio a risolvere questo? Sembra essere il mio unico grande ostacolo, come altri errori si basano solo sulla mancanza di essere in grado di vedere hostRef dopo. EDIT:. Scratch che ho anche ottenere kCFHostAddresses non dichiarato

È stato utile?

Soluzione 3

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

Si è un piccolo grande risposta attraverso il sistema di supporto tecnico, questo ha funzionato perfettamente.

Altri suggerimenti

È possibile utilizzare CFHost per ottenere lo stesso. Sulla parte superiore della CFHost Riferimento è una ricetta libro di cucina per fare la ricerca.

Il codice seguente fa molto, risoluzione sincrona molto di base (come la tua di cui sopra farebbe con NSHost). Nota che non si vuole fare questo in quanto può rendere la vostra applicazione non risponde perché non ritorna fino a quando è risolto o colpi di timeout.

Usa asincrona di ricerca invece (CFHostSetClient e CFHostScheduleWithRunLoop come descritto nella documentazione CFHost sopra). Inoltre, a seconda di cosa si sta progettando di fare, si potrebbe voler considerare di usare le API di raggiungibilità. Controlla le sessioni WWDC sulla messa in rete disponibile sul sito degli sviluppatori 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top