11

我在使用 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 但它没有触发

4

2 回答 2

39

如果要查看是否使用 找到了字符串-[NSString rangeOfString:],则需要查看 NSRange.location == NSNotFound:

if (range.location != NSNotFound) {
    // String was found
else {
    // String not found
}
于 2010-11-30T04:27:21.467 回答
2

作为一般评论,如果您拆分嵌套的方法调用并快速执行 NSLog 以查看发生了什么,调试会容易得多。(我不太擅长遵守这一点,所以这并不意味着批评)。

我首先注意到的一件事是使用“%f”来显示长度,尝试使用 %i(整数),你应该能够得到正确的长度。%f 将始终显示 0.00000。

你用的是什么网址?鉴于您正在从标题中提取数据,字符串“x”可能出现在字段中,也可能不出现。我建议对您从字典中提取的 NSString* 对象进行 NSLog-ing 并检查发生了什么。例如: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”的索引,这是预期的结果吗?

于 2010-11-30T03:27:33.900 回答