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

そして、2回目にコードを実行します。

0.000000
AUTHING

一体何が起こっているのですか?NSNotFoundうまくいかなかったと思います。この問題を見つけたのは私だけではないので、それを使用することは解決策ではありません。

助けてくれてありがとう。

乾杯

編集:NSLog(@ "%d"、range.length)を使用してみましたが、最初に実行したときに誤った出力が表示され、2回目に実行したときに正しい出力が表示されます。奇妙な出力は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を実行して何が起こっているかを確認すると、デバッグがはるかに簡単になります。(私はそれに固執するのが苦手なので、批判を意味するものではありません)。

私が最初に気づいたことの1つは、長さを表示するために「%f」を使用することでした。%i(整数)を使用してみてください。正しい長さを取得できるはずです。%fは常に0.00000を表示します。

どのURLを使用していますか?ヘッダーからデータをプルしている場合、文字列「x」がフィールドに存在する場合と存在しない場合があります。辞書から取り出したNSString*オブジェクトをNSLogし、何が起こっているかを確認することをお勧めします。例: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 に答える