2013-08-26 52 views
1

我正在處理字符串,並且我有一個小問題,我不理解。事實上,我有這樣的字符串:"ALAsset - Type:Photo,URLs:assets-library://asset/asset.JPG?id=168BA548-9C81-4B08-B69C-B775E5DD9341&ext=JPG",我需要找到"URLs:" and "?id="之間的字符串。爲此,我試圖使用NSRange創建一個新字符串。在這種模式下,我給出了我需要的第一個索引和最後一個索引,但它似乎不起作用。 這裏有我的代碼:Objective-C - 與字符串一起使用,找到一個帶有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

你爲什麼要閱讀像techtopia這樣的網站?您需要使用NSString的所有信息都可以通過apple.com獲得。它有大量的信息顯示如何使用字符串。 –

回答

2

不要解析ALAsset描述字符串!如果說明改變了你的代碼中斷。使用方法ALAssetNSURL爲您提供。首先,通過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) { 

}]; 
+0

感謝您的幫助! – Hieicker

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]; 
3

試試這個範圍: NSMakeRange(first.location + first.length, second.location - (first.location + first.length))

相關問題