2013-02-25 51 views
-2

这种提取一些元素的最简单的方法就是URL什么是从这个URL

assets-library://asset/asset.JPG?id=CF2AF034-9CF7-4472-9185-5EEFA1614A07&ext=JPG 

我想:

CF2AF034-9CF7-4472-9185-5EEFA1614A07 

我会怎么做呢? NSURL中有一种方法可以实现这一点吗?

这是我做过什么:

-(NSString *) fgetTokenWithPre:(NSString *) pre andPost:(NSString*) post startSearch:(NSUInteger) start 
{ 
NSRange rangeToSearch; 
rangeToSearch.location = start; 
rangeToSearch.length =self.length-rangeToSearch.location; 

NSRange preRange = [self rangeOfString:self options:NSCaseInsensitiveSearch range:rangeToSearch]; 

结果

(lldb) po self 
$6 = 0x1e54f130 id=00000000-0000-0000-0000-0000000005E9&ext=JPG 
(lldb) po pre 
$7 = 0x0021d8a0 id= 
(lldb) p preRange 
(NSRange) $8 = location=0, length=47 

但是,这没有任何意义。很显然,自我是长度为47,我期待的只有3长度。那么preRange怎么是[0,47]?

+0

http://stackoverflow.com/search?q=%5Bobjc%5D+extract+url:[提取URL的一部分(http://stackoverflow.com/q/3308681 ),[解析nsurl查询属性](http://stackoverflow.com/q/3997976),[如何提取url的方案和主机?](http://stackoverflow.com/q/8890475) – 2013-02-25 04:43:22

回答

0

下面的代码块可能会做你以后

__block NSString *queryID; 
[[[url query] componentsSeparatedByString:@"&"] enumerateObjectsUsingBlock:^(NSString *queryString, NSUInteger idx, BOOL *stop) { 
    NSArray *query = [queryString componentsSeparatedByString:@"="]; 
    if ([query[0] isEqualToString:@"id"]) { 
    queryID = query[1]; 
    *stop = YES; 
    } 
}]; 

NSLog(@"ID value = %@", queryID); 

然而,这是不是很安全。它对有关格式正确的URL进行了假设,并且在query阵列中将会有(至少)2个值。

0
NSUrl *asseturl = [NSURL URLWithString:@"assets-library://asset/asset.JPG?id=CF2AF034-9CF7-4472-9185-5EEFA1614A07&ext=JPG"]; 


ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) 
{ 
    ALAssetRepresentation *rep = [myasset defaultRepresentation]; 
    CGImageRef iref = [rep fullResolutionImage]; 
    if (iref) { 
     largeimage = [UIImage imageWithCGImage:iref]; 
     [largeimage retain]; 
    } 
}; 

// 
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) 
{ 
    NSLog(@"booya, cant get image - %@",[myerror localizedDescription]); 
}; 

if(mediaurl && [mediaurl length] && ![[mediaurl pathExtension] isEqualToString:AUDIO_EXTENSION]) 
{ 
    [largeimage release]; 
    NSURL *asseturl = [NSURL URLWithString:mediaurl]; 
    ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease]; 
    [assetslibrary assetForURL:asseturl 
        resultBlock:resultblock 
        failureBlock:failureblock]; 
} 

}