2010-01-22 4 views
6

내가 값에 아이폰 응용 프로그램 개방에 대한 사용자 정의 URL을 분할하고자하는 값, 내 방식이 될 것 같은 뭔가 :가장 좋은 방법은

appname://user=jonsmith&message=blah%20blah 

내가되고 싶은 경우 두 개의 NSString으로 "사용자"와 "메시지"를 얻을 수 있습니다. 최선의 접근에 대한 조언이 있습니까?

+0

, 일에 대한 내 대답을 위해, 당신이 필요로하는 것 물음표를 추가하십시오. appname : ///? user = jonsmith & message = blah % 20blah –

+0

문제 없음 - 더 쉬워진다. – mootymoots

답변

6

NSURL 객체에 url라는 당신의 URL 가정 : KennyTM는 지적

NSMutableDictionary *queryParams = [[NSMutableDictionary alloc] init]; 
NSArray *components = [[url query] componentsSeparatedByString:@"&"]; 

for (NSString *component in components) { 
    NSArray *pair = [component componentsSeparatedByString:@"="]; 

    [queryParams setObject:[[pair objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding: NSMacOSRomanStringEncoding] 
        forKey:[pair objectAtIndex:0]]; 
} 

... 

[queryParams release]; 
+0

+1 이것이 내가하는 방법이다. –

+1

URL은'appname : // user = jonsmith & message = blah % 20blah'가 아니라 'appname : // user = jonsmith & message = blah % 20blah'이므로 작동하지 않습니다. (나는 후자가 더 나은 선택임을 동의합니다.) – kennytm

+0

감사합니다, 이것은 가장 낮은 비용처럼 보입니다 - % 20 등을 인코딩하는 URL을 되돌릴 수있는 빠른 방법이 있습니까? – mootymoots

-1
NSString* yourString = @"appname://user=jonsmith&message=blah%20blah"; 
NSString* queryString = [yourString substringFromIndex:strlen("appname://")]; 
NSArray* queryArray = [queryString componentsSeparatedByString:@"&"]; 
NSMutableDictionary* queryDict = [NSMutableDictionary dictionary]; 
for (NSString* query in queryArray) { 
    NSUInteger indexOfEqualsSign = [query rangeOfString:@"="].location; 
    if (indexOfEqualsSign != NSNotFound) { 
     NSString* key = [[query substringToIndex:indexOfEqualsSign] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
     NSString* value = [[query substringFromIndex:indexOfEqualsSign+1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
     [queryDict setObject:value forKey:key]; 
    } 
} 
return queryDict; 

더 많은 메모리를 절약해야하는 경우 NSScanner을 사용하십시오.