URLWithString : nil 반환


93

매우 쉬울 수도 있지만 URLWithString:여기에서 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
webName전화하기 전에 의 가치는 무엇입니까 stringWithFormat:? 그러면에 stringURL전화하기 전에 의 가치는 무엇 URLWithString:입니까? 사용 NSLog()단계, 또는 중단 점을 설정하여 단계를 인쇄하고이 설정 될 때 값을 검사합니다.
Kevin Conner

답변:


203

하드 코딩 된 URL에서도 비 ASCII 문자를 이스케이프해야합니다.

//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];

전체 문자열의 이스케이프에 의해 처리되므로 localisationName의 이스케이프를 제거 할 수 있습니다.


URLWithString이 여기서 nil을 제공하는 이유를 이해하려고합니다. Apple 문서에서는 "RFC 2396을 준수하는 URL이어야합니다.이 메소드는 RFC 1738 및 1808에 따라 URLString을 구문 분석합니다."라고 말합니다. 일부 독서를하는 ...
russau

1
LOL, 이메일에서 URL을 복사했는데 이런 일이 발생했습니다! 감사.
Echelon 2015 년

1
URL에 #이 있으면 중단됩니다. stringByAddingPercentEscapesUsingEncoding% 2 변환 번호
알리 사이드

3
위 API는 더 이상 사용되지 않습니다. 다음 API를 사용할 수 있습니다 webStringURL = [stringURL stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
Rushabh

41

파일 관리자에 저장된 파일을 다룰 때이 기능을 사용하십시오.

NSURL *_url = [NSURL fileURLWithPath:path];

감사합니다! 나는 '가운데 트림'URL을 받고 있었다
codrut

8

을 사용해야한다고 생각합니다 -[NSString stringByAddingPercentEscapesUsingEncoding:]. Apple 문서를 참조하십시오 .

또 다른 의견은 이전 타이머로서 소스 파일에 ASCII가 아닌 문자를 넣는 것이 약간 불편하다는 것입니다. 즉,이 Apple 문서 는 10.4부터 UTF-16 문자열이 @"...". 어떻게 든 GCC는 Latin-1의 소스 파일을 바이너리에서 UTF-16으로 올바르게 변환하는 것처럼 보이지만 소스 코드 내에서만 7 비트 ASCII 문자를 사용하고 NSLocalizedString.


2

나는 당신의 악센트가있는 캐릭터가 물건을 던지고 있다고 생각합니다. -stringByAddingPercentEscapesUsingEncoding :에 의해 처리되지 않습니다.


2

NSURL URLWithString : @ ""는 URL이 RFC 2396을 따르지 않고 이스케이프되어야하는 경우 nil을 반환합니다.

링크에서 rfc2396 을 읽으면 많은 세부 정보를 얻을 수 있습니다.

문제가되는 문자가 어디에 있는지 확인하기 위해 찾은 훌륭한 사이트, URL에 대한 경로 옵션을 선택하십시오.

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


0

URLWithString : 호출은 전달 된 문자열이 잘못된 경우 nil을 반환합니다. NSURL은 잘못된 URL에 대해 nil을 반환하므로 NSURL 생성 방법에 전달되는 내용을 정확히 확인하기 위해 문자열을 NSLog하고 중단 점을 설정합니다. URLWithString이 하드 코딩 된 값으로 작동하면 전달하는 모든 것이 잘못되었다는 추가 증거입니다. 보다


-1

NSString없이 직접 NSURL을 사용할 수 있습니다.

//.h 파일

@interface NewsBrowser : UIViewController {

    UIWebView *webView;
    NSURL *NewsUrl;

}

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

@property(nonatomic,assign)NSURL *NewsUrl;

@end

//.m 파일

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

그리고 다른 뷰 (NewsUrl 변수 사용)에서이 뷰로 URL을 전달합니다.

시도 해봐.


이 대답은 URLWithString :이 nil을 반환하는 이유를 묻는 질문을 전혀 다루지 않았습니다. (또한 문자열을 URL로 변경하는 방법도 표시하지 않았습니다.)
ArtOfWarfare 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.