Problema con NSRange
-
29-09-2019 - |
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ó
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?