Проблема с NSRange - PullRequest
       11

Проблема с NSRange

9 голосов
/ 30 ноября 2010

У меня проблема с NSRange.Вот мой код:

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

Вывод на консоль:

0.000000
Do something

А потом во второй раз я бегу по коду:

0.000000
AUTHING

Что за чертпродолжается?NSNotFound Я думаю, что это не работает, и я не единственный, кто нашел эту проблему, поэтому ее использование не является решением.

Спасибо за любую помощь.

Приветствия

Редактировать: я пытался использовать NSLog (@ "% d", range.length), но он выдает неправильный вывод при первом запуске, во второй раз - правильно.Я пытался использовать NSNotFound, думая, что странный вывод из-за того, что это NSNotFound, но он не вызвал

Ответы [ 2 ]

34 голосов
/ 30 ноября 2010

Если вы хотите увидеть, была ли строка найдена с использованием -[NSString rangeOfString:], вам нужно посмотреть, если NSRange.location == NSNotFound:

if (range.location != NSNotFound) {
    // String was found
else {
    // String not found
}
2 голосов
/ 30 ноября 2010

Как общий комментарий, отладка будет намного проще, если вы разделите вызовы вложенных методов и сделаете быстрый NSLog, чтобы увидеть, что происходит. (Я не так хорош в этом, чтобы не критиковать).

Первое, что я заметил, было использование «% f» для отображения длины, попробуйте использовать% i (целое число), и вы сможете получить правильную длину. % f всегда будет отображать 0,00000.

Какой URL вы используете? учитывая, что вы извлекаете данные из заголовков, строка «x» может присутствовать или не присутствовать в поле. Я хотел бы предложить NSLoging объект NSString *, который вы извлекаете из словаря, и проверять, что происходит. Например: NSString * cookie = @ "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");
}

Кажется, что код просто определяет индекс строки "x" из того, что я могу сказать, это ожидаемый результат?

...