2013-06-14 37 views
6

Cách thích hợp để trích xuất và xóa tên sơ đồ và :// từ một số NSURL là gì?Làm thế nào để trích xuất và loại bỏ tên lược đồ khỏi NSURL?

Ví dụ:

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

nên

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

để sử dụng sau này trong:

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

NSString * str = [urURL absoluteString]; NSString * string = [str stringByReplacingOccurrencesOfString: @ ": //" withString: @ ""] // thử này – the1pawan

+0

Hãy xem [this] (https://github.com/joeldev/JLRoutes/blob/master /JLRoutes/JLRoutes.m#L82). Nó phân tích toàn bộ lược đồ URL, nhưng bạn có được ý chính của nó. – CodaFi

Trả lời

11

Bạn có thể nhìn vào nó như (mã chủ yếu chưa được kiểm tra điều này, nhưng bạn sẽ có được ý tưởng):

- (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); 
} 

Vì vậy, bạn có thể làm điều này:

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

cảm ơn, câu trả lời tuyệt vời – Andres

+0

thông tin hữu ích. cảm ơn – NightFury

5

nghiêng của tôi là để cuộn dây của riêng bạn tìm kiếm này:

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

này không những gì bạn đã được yêu cầu trong một thời trang hoàn toàn, phân chia các URL trong một nửa xung quanh sche của nó tôi. Để xử lý nâng cao hơn, bạn sẽ phải cung cấp thêm chi tiết.

1

Hãy nhớ rằng, đừng chống lại các khuôn khổ đặc biệt là khi nói đến NSURL. Câu trả lời SO này có một phân tích tốt về khả năng của nó. https://stackoverflow.com/a/3693009/142358

NSURL của schemepath tính là chính xác những gì bạn muốn mà (giả định phần còn lại của URL của bạn trông giống như một con đường) để lại cho bạn với điều này:

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

Không chuỗi: tìm kiếm này cần thiết!

Các vấn đề liên quan