Alternativas a NSHost de aplicación para el iPhone
-
26-09-2019 - |
Pregunta
Actualmente estoy usando el 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;
}
}
retrive mi dirección IP para una aplicación de red que estoy trabajando, sin embargo, soy consciente de que NSHost es una API privada que será rechazado. ¿Puede alguien ayudarme con este código de trabajo para producir los mismos resultados sin necesidad de utilizar NSHost? No estoy realmente seguro de por dónde empezar.
EDIT:
Siguiendo las sugerencias que parecen maldito casi perfecto a continuación He añadido este código en mi aplicación en el lugar del código anterior
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");
}
He eliminado la cuarta línea (como tengo esta información desde ya en otro lugar) pero me da errores se basan en CFHostRef ser declarado. ¿Cómo voy a resolver esto? Parece que es mi único gran obstáculo, como otros errores que solamente se basan en la falta de poder ver hostRef después de eso. EDIT:. Arañazos que también consigue kCFHostAddresses no declarados
Solución 3
http://developer.apple.com/iphone/library /qa/qa2009/qa1652.html
¿Tienes un pequeño gran respuesta a través del sistema de soporte de programador, esto funcionó a la perfección.
Otros consejos
Se puede utilizar CFHost para lograr el mismo. En la parte superior de la CFHost de referencia es una receta libro de cocina para la fabricación de las operaciones de búsqueda.
El siguiente código hace muy, resolución sincrónica muy básico (como la suya por encima haría con NSHost). Tenga en cuenta que que no quieren hacer esto, ya que puede hacer que su aplicación no responde , ya que no se devuelve hasta que se resuelva o los éxitos de tiempo de espera.
Uso de búsqueda asíncrona en lugar (CFHostSetClient y CFHostScheduleWithRunLoop como se describe en la documentación CFHost arriba). También, dependiendo de lo que está planeando hacer, es posible que desee ver en el uso de la API de accesibilidad. Echa un vistazo a las sesiones de la WWDC en la creación de redes disponibles en el sitio web de desarrollador de 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