2010-11-30 38 views
9

Tôi đang gặp sự cố với NSRange. Đây là mã của tôi:Sự cố với 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"); 
} 

đầu ra Console:

0.000000 
Do something 

Và sau đó lần thứ hai tôi chạy qua các mã:

0.000000 
AUTHING 

Cái quái gì đang xảy ra? NSNotFound Tôi nghĩ rằng nó không hoạt động và tôi không phải là người duy nhất tìm ra vấn đề này nên việc sử dụng nó không phải là một giải pháp.

Cảm ơn bạn đã được trợ giúp.

Cheers

Edit: Tôi cố gắng sử dụng NSLog (@ "% d", range.length) nhưng nó mang lại cho sản lượng không chính xác lần đầu tiên nó chạy qua, lần thứ hai nó chạy qua nó là đúng. Tôi đã thử sử dụng NSNotFound nghĩ rằng đầu ra lạ là do nó là NSNotFound nhưng nó không kích hoạt

Trả lời

31

Nếu bạn muốn xem nếu chuỗi được tìm thấy sử dụng -[NSString rangeOfString:], bạn cần phải xem nếu NSRange.location == NSNotFound:

if (range.location != NSNotFound) { 
    // String was found 
else { 
    // String not found 
} 
+0

Không, kết quả tương tự như với độ dài. – Rudiger

+0

Trong trường hợp đó, chuỗi của bạn có thể không chứa những gì bạn nghĩ rằng nó nên chứa. Chuỗi 'cookieParameter' có chứa gì khi bạn sử dụng mã @ aosik từ trên cao? –

+0

Nó chứa null – Rudiger

2

Như một bình luận chung, gỡ lỗi sẽ dễ dàng hơn nhiều nếu bạn chia các cuộc gọi phương thức lồng nhau và thực hiện NSLog nhanh xem chuyện gì đang xảy ra. (Tôi không giỏi trong việc tôn trọng điều đó vì vậy nó không có nghĩa là chỉ trích).

Một điều tôi lưu ý đầu tiên là sử dụng "% f" để hiển thị độ dài, hãy thử sử dụng% i (số nguyên) và bạn sẽ có thể nhận được độ dài chính xác. % f sẽ luôn hiển thị 0.00000.

bạn đang sử dụng url nào? cho rằng bạn đang kéo dữ liệu từ các tiêu đề, chuỗi "x" có thể có hoặc không có mặt trong trường. tôi sẽ đề nghị NSLog-ing các NSString * đối tượng mà bạn kéo ra khỏi từ điển và kiểm tra xem những gì đang xảy ra. Ví dụ: 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"); 
} 

Dường như mã chỉ phát hiện chỉ mục của chuỗi "x" từ những gì tôi có thể biết, đây có phải là kết quả mong muốn không?

+0

x đang ở thay thế của một cái gì đó không liên quan đến câu hỏi. Tất cả những gì tôi kiểm tra là nếu x nằm trong chuỗi. Tôi đã thử% i như bạn đã nói và đầu ra tương tự như% d. Lần đầu tiên tôi kiểm tra% i nó là 860329857. Tôi nghĩ rằng điều này có thể được định nghĩa là NSNotFound nhưng tôi đã thử và không có con xúc xắc – Rudiger

+0

Như một lưu ý bên thats lý do tại sao tôi sử dụng% f, khi tôi nhận được một số ngu ngốc như 860329857 không cùng loại,% d cho kết quả nghi ngờ là 0.00000 – Rudiger

+0

NSLog (@ "% i", range.location); cung cấp cho một sản lượng không chính xác tương tự xin lỗi. – Rudiger