首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSRange的问题

NSRange的问题
EN

Stack Overflow用户
提问于 2010-11-30 11:04:17
回答 2查看 22.8K关注 0票数 11

我和NSRange有点问题。下面是我的代码:

代码语言:javascript
运行
复制
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");
}

控制台输出:

代码语言:javascript
运行
复制
0.000000
Do something

然后当我第二次运行代码时:

代码语言:javascript
运行
复制
0.000000
AUTHING

见鬼这是怎么回事?NSNotFound我认为它不工作,我不是唯一一个发现这个问题的人,所以使用它不是一个解决方案。

谢谢你的帮助。

干杯

编辑:我尝试使用NSLog(@"%d",range.length),但它第一次运行时输出不正确,第二次运行时输出是正确的。我试过使用NSNotFound,我认为奇怪的输出是因为它是NSNotFound,但它没有触发

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-30 12:27:21

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

代码语言:javascript
运行
复制
if (range.location != NSNotFound) {
    // String was found
else {
    // String not found
}
票数 39
EN

Stack Overflow用户

发布于 2010-11-30 11:27:34

总而言之,如果您拆分嵌套的方法调用并快速执行NSLog以查看发生了什么,则调试会容易得多。(我不擅长坚持这一点,所以这不是批评的意思)。

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

您使用的url是什么?假设您是从标题中提取数据,字符串"x“可能会出现在字段中,也可能不会出现。我建议对从字典中取出的NSString*对象进行NSLog记录,并检查发生了什么。例如:NSString *cookie = @"http://www.google.com/"

代码语言:javascript
运行
复制
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“的索引,这是预期的结果吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4310180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档