2012-08-31 2 views
4

NSURL 클래스 참조에 제공된 메소드를 사용하여 구성표, 경로 및 매개 변수를 가져 오기 위해 URL을 구문 분석하려고합니다.스키마에 이중 슬래시가없는 경우 NSURL 구성 요소를 가져올 수 없습니다.

NSString *urlString = @"customScheme:myPath?parameter=hello&other_parameter=12"; 
NSURL *url = [NSURL URLWithString:urlString]; 

내가 NSURL에서 그 값 중 하나를 잡아 수 없습니다 : 나는 (계획 이후에는 이중 슬래시)의 URL이 방법을 구축하지 않는 경우, 그러나에 주목하고있다. 즉, 방법은

path 
query 

return nil입니다.

은이 같은 이중 슬래시를 추가하는 경우 :

NSString *urlString = @"customScheme://myPath?parameter=hello&other_parameter=12"; 
NSURL *url = [NSURL URLWithString:urlString]; 

모든 것이 잘 작동합니다. 왜 이런거야?

감사합니다.

답변

2

이러한 방법은 매우 명확 애플의 문서에 설명되어 있습니다 :

path 는 RFC 1808

- (NSString *)path

에 URL의 경로를 따르는 URL의 경로를 반환으로, 이스케이프 stringByReplacingPercentEscapesUsingEncoding: 방법. 수신자가 RFC 1808을 준수하지 않으면 nil을 반환합니다.

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html

그리고 RFC 1808 유효한 상대 URL을 구성하는 것에 대해 매우 분명하다 : 당신이 mailto: URL을 구문 분석하려면

<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

http://www.w3.org/Addressing/rfc1808.txt

및 좋아, 당신은 NSURL 이외의 무언가를 사용해야 할 것입니다.

2

비 RFC 1808 호환 URL의 경우 콜론 다음에 URL 부분을 검색하려면 -[NSURL resourceSpecifier]을 사용하는 것이 좋습니다. 그 후에는 "경로"와 "쿼리"로 분류해야합니다.

관련 문제