Frage

Ich bin diesen Code zur Zeit mit

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

auf meine IP-Adresse für einen Netzwerk-App retrive ich arbeite, aber bin mir bewusst, dass NSHost eine private API ist, die abgelehnt werden. Kann mir jemand helfen mit diesem Code arbeiten, um die gleichen Ergebnisse ohne NSHost zu produzieren? Ich bin mir nicht wirklich sicher, wo ich anfangen soll.

EDIT:

Nach den Vorschlägen, das verdammt nahe perfekt scheint unter ich diesen Code in meine Anwendung an der Stelle des Codes hinzugefügt habe oben

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

Ich habe die 4. Zeile entfernt (wie ich diese Informationen von anderswo schon), aber ich bekomme Fehler um basiert CFHostRef nicht deklariert werden. Wie würde ich das lösen? Es scheint, meine einzige große Hürde zu sein, wie andere Fehler nur auf den Mangel an in der Lage, basiert hostRef danach zu sehen. EDIT:. Scratch, dass ich auch kCFHostAddresses nicht deklariert bekommen

War es hilfreich?

Lösung 3

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

Got eine große kleine Antwort durch das Entwickler-Support-System, das funktionierte perfekt.

Andere Tipps

Sie können CFHost verwenden das gleiche zu erreichen. Auf der Oberseite der CFHost Referenz ist ein Kochbuch Rezept des Nachschlag zu machen.

Der folgende Code tut sehr, sehr einfache synchrone Auflösung (wie Sie oben würde NSHost). Beachten Sie, dass Sie wollen nicht, dies zu tun, da es Ihre Anwendung machen kann nicht mehr reagiert , weil es nicht zurück, bis sie oder die Timeout-Hits aufgelöst wird.

Verwenden Sie asynchrone Lookup statt (CFHostSetClient und CFHostScheduleWithRunLoop wie in der CFHost Dokumentation wie oben beschrieben). Auch je nachdem, was Sie vorhaben zu tun, können Sie in mit den Erreichbarkeits APIs suchen. Schauen Sie sich die WWDC-Sitzungen auf auf der iPhone Entwickler-Website verfügbar zu vernetzen.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top