2016-06-06 3 views
2
http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3 

So erhalten Sie diesen URL-Teil fksmf84-8493-45u3 ?? - Dieser Teil ändert sich ständig zur Laufzeit.Parsing eines URL-Links in Segmente

Dies ist, was ich bisher versucht habe.

NSString *url = @"http://180.160.1.140/webapp/camera?id="; 
NSArray *parts = [url componentsSeparatedByString:@"="]; 
NSString *personID = [parts lastObject]; 
NSLog(@"My ID: %@", personID); 
+0

haben Sie lesen meine Antwort? – Masterfego

Antwort

0

siehe:

NSString *url = @"http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3"; // you forgot to add the id in your test case 
NSArray *parts = [url componentsSeparatedByString:@"="]; 
NSString *personID = [parts lastObject]; 
NSLog(@"My ID: %@", personID); 

Der Ausgang: Meine ID: fksmf84-8493-45u3

EDIT:

Um die Daten zu speichern:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

[defaults setObject:personID forKey:@"personID"]; 

die Daten zu lesen:

NSString *personID = [defaults objectForKey:@"personID"]; 

Mit dieser Methode können Sie leicht den Wert des letzten Laufes erhalten. Hoffe das wird dir helfen :). URL-Komponenten

+0

aber fksmf84-8493-45u3 dieser Teil ändert sich ständig. ist es in Ordnung, für eine Initiale überhaupt zu verwenden? @Masterfego – DDDDD

+0

Also was willst du? Nimm einfach die ID oder etwas anderes? – Masterfego

+0

Ich möchte nur diesen Teil 'fksmf84-8493-45u3' nehmen, aber diese Buchstaben und Zahlen ändern sich ständig, so dass es nicht stabil ist. Es kann 'jdfsfmsf-0000-78h6' für das nächste Mal sein. @Masterfego Funktioniert das noch? Ich möchte es dynamisch machen. – DDDDD

3

Um alle Schlüssel-Wert-Paare zu analysieren und sie als Wörterbuch erhalten Sie -parseQueryString: Methode verwenden können.

Sie können die Abfragezeichenfolge wie folgt analysieren ...

{ 
    //... 
    NSString * urlQuery    = [url query]; 
    NSDictionary *dict = [self parseQueryString:urlQuery]; 
    NSString * valueForID = dict["id"]; 
    //... 
    } 
    // Waring : Its just a prototype, at production this might need safety checks. 
    - (NSDictionary *)parseQueryString:(NSString *)query 
    { 
     NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
     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 addObject:val forKey:key]; 
     } 
     return dict; 
    } 

-Update: Wenn iOS-Versionen neuer als 7, prüfen Richmond Watkins Antwort Targeting. New api wurden für den gleichen Zweck hinzugefügt, Check NSURLQueryItem

5

mit:

ObjC:

NSString *urlString = "http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3"; 
NSURLComponents *components = [NSURLComponents componentsWithString:urlString]; 
NSArray *queryItems = components.queryItems; 

for (NSURLQueryItem *queryItem in queryItems) { 
    if ([queryItem.name isEqualToString:@"id"]) { 
     NSLog(@"%@", queryItem.value); 
     break; 
    } 
} 

Swift:

let urlComponents = NSURLComponents(string: "http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3") 
let queryItems = urlComponents?.queryItems 
if let id = queryItems?.filter({$0.name == "id"}).first?.value { 
    print(id) 
} 

Swift 3 (Grundsätzlich ist die gleiche - NS):

let urlComponents = URLComponents(string: "http://180.160.1.140/webapp/camera? 
id=fksmf84-8493-45u3") 
let queryItems = urlComponents?.queryItems 
if let id = queryItems?.filter({$0.name == "id"}).first?.value { 
    print(id) 
} 
+0

Upvote! . Das ist viel besser Ansatz als meine Antwort. Verwenden der NSURLQueryItem-Klasse :) – BangOperator

+0

Besserer Weg, +1 zu tun – Sabby