2013-06-14 6 views
6

Jaki jest właściwy sposób wyodrębniania i usuwania nazwy schematu i :// z NSURL?Jak wyodrębnić i usunąć nazwę schematu z NSURL?

Na przykład:

note://Hello -> @"Hello" 
calc://3+4/5 -> @"3+4/5" 

tak

NSString *scheme = @"note://"; 
NSString *path = @"Hello"; 

do późniejszego użycia w:

[[NSNotificationCenter defaultCenter] postNotificationName:scheme object:path]; 
+1

NSString * str = [urURL absoluteString]; NSString * string = [str stringByReplacingOccurrencesOfString: @ ": //" withString: @ ""] // spróbuj tego – the1pawan

+0

Zobacz [to] (https://github.com/joeldev/JLRoutes/blob/master /JLRoutes/JLRoutes.m#L82). Analizuje cały schemat adresów URL, ale dostajesz jego istotę. – CodaFi

Odpowiedz

11

Można spojrzeć na to w ten sposób (kod głównie niesprawdzonych, ale masz pomysł):

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    NSLog(@"scheme: %@", [url scheme]); 
    NSLog(@"url: %@", url); 
    NSLog(@"query: %@", [url query]); 
    NSLog(@"host: %@", [url host]); 
    NSLog(@"path: %@", [url path]); 

    NSDictionary * dict = [self parseQueryString:[url query]]; 
    NSLog(@"query dict: %@", dict); 
} 

Więc można to zrobić:

NSString * strNoURLScheme = 
[strMyURLWithScheme stringByReplacingOccurrencesOfString:[url scheme] withString:@""]; 

NSLog(@"URL without scheme: %@", strNoURLScheme); 

parseQueryString

- (NSDictionary *)parseQueryString:(NSString *)query 
{ 
    NSMutableDictionary *dict = [[[NSMutableDictionary alloc] initWithCapacity:6] autorelease]; 
    NSArray *pairs = [query componentsSeparatedByString:@"&"]; 

    for (NSString *pair in pairs) { 
     NSArray *elements = [pair componentsSeparatedByString:@"="]; 
     NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
     NSString *val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];   
     [dict setObject:val forKey:key]; 
    } 
    return dict; 
} 
+1

dzięki, świetna odpowiedź – Andres

+0

przydatne informacje. dzięki – NightFury

5

Moje nachylenie jest, aby rzucić swój własny ciąg szukając w ten sposób:

NSRange dividerRange = [urlString rangeOfString:@"://"]; 
NSUInteger divide = NSMaxRange(dividerRange); 
NSString *scheme = [urlString substringToIndex:divide]; 
NSString *path = [urlString substringFromIndex:divide]; 

to robi to, co Zapytałem w dosłownym sensie, dzieląc adres URL na pół dookoła jego schematu mnie. Aby uzyskać bardziej zaawansowaną obsługę, musisz podać więcej szczegółów.

1

Pamiętaj, nie walcz z frameworkiem, szczególnie jeśli chodzi o NSURL. Ta odpowiedź SO ma dobry podział jej umiejętności. https://stackoverflow.com/a/3693009/142358

bibliotece NSURL za scheme i path właściwości są dokładnie to, co chcesz, które (zakładając, że resztę swojego adresu URL wygląda ścieżce) pozostawia nam to: poszukiwanie potrzebne

NSString *schemeWithDelimiter = [NSString stringWithFormat:@"%@://",[myURL scheme]]; 
[[NSNotificationCenter defaultCenter] postNotificationName: schemeWithDelimiter object:[myURL path]; 

Nie łańcuch!