将 URL link 解析成段

parsing a URL link into segments

http://180.160.1.140/webapp/camera?id=fksmf84-8493-45u3

如何获得此 url 部分 fksmf84-8493-45u3? -- 这部分在 运行 时间不断变化。

这是我目前尝试过的方法。

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

要解析所有键值对并将它们作为字典获取,您可以使用 -parseQueryString: 方法。

您可以像这样解析您的查询字符串...

   {
    //...
    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 :如果目标 iOS 版本高于 7,请查看 Richmond Watkins 的回答。出于相同目的添加了新的 api,检查 NSURLQueryItem

参见:

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

输出:我的ID:fksmf84-8493-45u3

编辑:

要存储数据:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

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

读取数据:

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

用这个方法可以很方便的得到最后一个运行的值。希望这会对你有所帮助:) .

具有 URL 个组件:

对象:

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({[=11=].name == "id"}).first?.value {
    print(id)
}

Swift 3(基本相同-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({[=12=].name == "id"}).first?.value {
    print(id)
}