2009-12-30 8 views
87

nó có thể rất dễ dàng, nhưng tôi dường như không tìm ra lý do tại sao là URLWithString: quay lại nil tại đây.URLWithString: trả về nil

//localisationName is a arbitrary string here 
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false&key=", webName]; 
NSURL* url = [NSURL URLWithString:stringURL]; 
+1

là gì giá trị của 'webName' trước khi bạn gọi' stringWithFormat: '? Sau đó, giá trị của 'stringURL' trước khi bạn gọi' URLWithString: 'là gì? Sử dụng 'NSLog()' để in chúng từng bước, hoặc, thiết lập các điểm ngắt và kiểm tra các giá trị khi chúng được thiết lập. –

Trả lời

189

Bạn cần phải thoát khỏi các ký tự ASCII trong URL mã hóa cứng của bạn cũng như:

//localisationName is a arbitrary string here 
NSString* webName = [localisationName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* stringURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@,Montréal,Communauté-Urbaine-de-Montréal,Québec,Canadae&output=csv&oe=utf8&sensor=false", webName]; 
NSString* webStringURL = [stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL* url = [NSURL URLWithString:webStringURL]; 

Bạn có lẽ có thể loại bỏ các thoát của localisationName vì nó sẽ được xử lý bởi các thoát của toàn bộ chuỗi.

+0

Thnx Làm việc tốt của nó ......... –

+0

hoạt động của nó .... tốt – Akshay

+0

Cố gắng hiểu tại sao URLWithString đang cho nil ở đây. Tài liệu của Apple nói "Phải là URL phù hợp với RFC 2396. Phương pháp này phân tích cú pháp URLString theo RFC 1738 và 1808.". Làm một số việc đọc ... – russau

8

Tôi đoán bạn cần sử dụng -[NSString stringByAddingPercentEscapesUsingEncoding:]. Xem Apple doc.

Một nhận xét khác là, như một bộ hẹn giờ cũ, tôi thấy hơi khó chịu khi đặt các ký tự không phải ASCII trong một tệp nguồn. Điều đó nói rằng, điều này Apple doc nói, bắt đầu từ 10.4, chuỗi UTF-16 là OK bên trong @"...". Bằng cách nào đó GCC dường như chuyển đổi chính xác tệp nguồn trong Latin-1 thành UTF-16 trong tệp nhị phân, nhưng tôi cho rằng chỉ sử dụng ký tự ASCII 7 bit bên trong mã nguồn và sử dụng NSLocalizedString.

2

Tôi nghĩ rằng các ký tự có dấu của bạn đang ném mọi thứ ra; chúng sẽ không được xử lý bởi -stringByAddingPercentEscapesUsingEncoding :.

0

URLWithString: cuộc gọi sẽ trả về một số không nếu chuỗi được truyền đến không đúng định dạng. Vì NSURL trả về nil cho các url không đúng định dạng, NSLog chuỗi của bạn và thiết lập các điểm ngắt để xem chính xác những gì đang được chuyển đến phương thức tạo NSURL của bạn. Nếu URLWithString của bạn hoạt động với một giá trị mã hóa cứng, đó là bằng chứng thêm rằng bất cứ điều gì bạn đang đi là không đúng định dạng. see

0

Bạn có thể sử dụng NSURL trực tiếp mà không cần NSString.

//.h tập tin

@interface NewsBrowser : UIViewController { 

    UIWebView *webView; 
    NSURL *NewsUrl; 

} 

@property (nonatomic, retain) IBOutlet UIWebView *webView; 

@property(nonatomic,assign)NSURL *NewsUrl; 

@end 

//.m tập tin

[webView loadRequest:[NSURLRequest requestWithURL:NewsUrl]]; 

Và tôi vượt qua URL từ cái nhìn khác (sử dụng biến NewsUrl) quan điểm này.

Hãy dùng thử.

+0

Câu trả lời này không giải đáp được câu hỏi, đó là lý do tại sao URLWithString: đã trở lại không. (Hơn nữa, bạn thậm chí không hiển thị một phương tiện để thay đổi một chuỗi thành một URL.) – ArtOfWarfare

37

Sử dụng chức năng này nếu bạn xử lý tệp được lưu trên trình quản lý tệp.

+0

cảm ơn đó là những gì tôi đang tìm kiếm. – user1258240

+0

Điều này cũng làm việc cho tôi – ekscrypto

+0

Đây là một giải pháp tuyệt vời và súc tích, cảm ơn! – ThinkBonobo

2

NSURL URLWithString: @ "" sẽ trở lại con số không nếu URL không phù hợp với RFC 2396 và họ phải được thoát

Nếu bạn đọc qua rfc2396 trong liên kết mà bạn sẽ nhận được vô số chi tiết

Một trang web tuyệt vời, tôi tìm thấy cho kiểm tra nơi nhân vật vi phạm là, chọn tùy chọn con đường cho URL

http://www.websitedev.de/temp/rfc2396-check.html.gz