我正在处理字符串,我有一个小问题,我不理解。事实上,我有一个这样的字符串:"ALAsset - Type:Photo,
URLs:assets-library://asset/asset.JPG?id=168BA548-9C81-4B08-B69C-B775E5DD9341&ext=JPG"
我需要找到"URLs:" and "?id="
之间的字符串。为此,我正在尝试使用NSRange
创建一个新字符串。在这种模式下,我给出了我需要的第一个索引和最后一个索引,但它似乎不起作用。
这里有我的代码:
NSString *description = [asset description];
NSRange first = [description rangeOfString:@"URLs:"];
NSRange second = [description rangeOfString:@"?id="];
NSString *path = [description substringWithRange: NSMakeRange(first.location, second.location)];
它返回给我这种字符串:"URLs:assets-library://asset/asset.JPG?id=168BA548-9C81-4B08-B69C-B775E5DD9341&ext=JPG"
。这是对的吗?我期待获得"assets-library://asset/asset.JPG" string.
哪里我做错了?有一个更好的方法吗?
我已按照此网址寻求帮助:http://www.techotopia.com/index.php/Working_with_String_Objects_in_Objective-C
由于
答案 0 :(得分:3)
尝试此范围:
NSMakeRange(first.location + first.length, second.location - (first.location + first.length))
答案 1 :(得分:2)
不要解析ALAsset
描述字符串!如果描述改变了您的代码中断。使用方法ALAsset
和NSURL
为您提供。首先,通过valueForProperty:
方法获取URL字典(按资产类型映射)。然后,对于每个URL,获取absoluteString
并从中删除查询字符串。通过在单视图iPhone应用程序模板的application:didFinishLaunchingWithOptions:
方法中放置以下代码,我得到了您要查找的字符串。
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) {
NSDictionary *URLDictionary = [asset valueForProperty:ALAssetPropertyURLs];
for (NSURL *URL in [URLDictionary allValues]) {
NSString *URLString = [URL absoluteString];
NSString *query = [URL query];
if ([query length] > 0) {
NSString *toRemove = [NSString stringWithFormat:@"?%@",query];
URLString = [URLString stringByReplacingOccurrencesOfString:toRemove withString:@""];
NSLog(@"URLString = %@", URLString);
}
}
}];
} failureBlock:^(NSError *error) {
}];
答案 2 :(得分:1)
NSRange first = [description rangeOfString:@"URLs:"];
为您提供U
的位置,因此您需要first.location+5
获取assets-library
的起始位置。
NSRangeMake(loc,len)
需要一个起始位置loc
和一个长度,因此您需要使用second.location-first.location-5
来获取所需的长度。
全部添加,将最后一行替换为:
NSRange r = NSMakeRange(first.location+5, second.location-first.location-5);
NSString *path = [description substringWithRange:r];