1

私は文字列を扱っていますが、理解できないという小さな問題があります。実際、私は次のような文字列を持っています:"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. どこで私が間違っているのですか?これを行うより良い方法はありますか?私は助けのためにこのURLをたどりました:http://www.techotopia.com/index.php/Working_with_String_Objects_in_Objective-C

ありがとう

4

3 に答える 3

3

この範囲を試してください: NSMakeRange(first.location + first.length, second.location - (first.location + first.length))

于 2013-08-26T07:37:10.390 に答える
2

説明文字列を解析しないでくださいALAsset! 説明が変更された場合、コードが壊れます。メソッドALAssetを使用してNSURL提供します。まず、メソッドを使用して URL のディクショナリ (アセット タイプごとにマッピング) を取得しますvalueForProperty:。次に、URL ごとにabsoluteString、クエリ文字列を取得して削除します。application:didFinishLaunchingWithOptions:シングルビュー iPhone アプリ テンプレートのメソッドに次のコードを配置することで、探していた文字列を取得しました。

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

}];
于 2013-08-26T08:14:07.540 に答える
1
NSRange first = [description rangeOfString:@"URLs:"];

は の位置を与えるので、 の開始位置を取得するにはUを取る必要があります。first.location+5assets-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];
于 2013-08-26T07:36:19.637 に答える