Pregunta

Estoy teniendo un problema con NSRange. Aquí está mi código:

NSRange range = [[[NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:cookie]]] objectForKey:@"Cookie"] rangeOfString:@"x"];
NSLog(@"%f", range.length);
if (range.length >= 1) {
    NSLog(@"Do Something");
} else {
    NSLog(@"AUTHING");
}

salida de la consola:

0.000000
Do something

Y a continuación, la segunda vez que funciono a través del código:

0.000000
AUTHING

¿Qué demonios está pasando? NSNotFound creo que fue que no funciona y que no soy la única persona encontrar este problema para usarlo no es una solución.

Gracias por cualquier ayuda.

Saludos

Edit: He intentado utilizar NSLog (@ "% d", range.length) pero da salida incorrecta la primera vez que se ejecuta a través de, la segunda vez que se ejecuta a través de que es correcta. He intentado usar el pensamiento NSNotFound que la extraña salida es debido a que es NSNotFound pero no provocó

¿Fue útil?

Solución

Si desea ver si se encuentra la cadena usando -[NSString rangeOfString:], es necesario ver si NSRange.location == NSNotFound:

if (range.location != NSNotFound) {
    // String was found
else {
    // String not found
}

Otros consejos

Como comentario general, la depuración es mucho más fácil si se divide por las llamadas a métodos anidados y hacer una rápida NSLog para ver lo que está pasando. (I no soy tan bueno en la adhesión a la misma por lo que no quiere decir que la crítica).

Una cosa que observó por primera vez fue el uso de "% f" para mostrar la longitud, trate de usar% i (número entero) y usted debería ser capaz de obtener la longitud correcta. % F siempre mostrará 0,00000.

url lo está usando? dado que usted está tirando de los datos de las cabeceras, la cadena "x" puede o no estar presente en el campo. yo sugeriría NSLog-ción del NSString * objeto que usted saca del diccionario y comprobación para ver lo que está pasando. E.g.:NSString * = @ galletas "http://www.google.com/";

NSHTTPCookieStorage *store = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSURL *url = [NSURL URLWithString:cookie];
NSDictionary *header = [NSHTTPCookie requestHeaderFieldsWithCookies: [store cookiesForURL:url]];
NSString *cookieParameter = [header objectForKey:@"Cookie"];    

NSLog(@"Cookie param is %@", cookieParameter);

// Test range of "x"
NSRange range = [cookieParameter rangeOfString:@"x"];
NSLog(@"%f", range.length); // will print out 0.00000
NSLog(@"%i", range.length); // will print out correct length (always 1 for "x")
NSLog(@"%i", range.location); // will print out the location of the first instance of "x"
if (range.length >= 1) {
    NSLog(@"Do Something");
} else {
    NSLog(@"AUTHING");
}

Parece que el código sólo detecta el índice de la cadena "x" de lo que puedo decir, es este el resultado deseado?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top