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.