Dosya adı ALAsset'ten nasıl çıkarılabilir?ALAsset
Bunu URL yoluyla veya başka bir yolla elde etmenin bir yolu var mı?
Dosya adı ALAsset'ten nasıl çıkarılabilir?ALAsset
Bunu URL yoluyla veya başka bir yolla elde etmenin bir yolu var mı?
Güncelleştirmesi: Yeonsh aşağıdaki notlarda, iOS 5.0'dan daha iyi bir yol var. Bu cevap iOS < 5.0 ile ilgilidir.
Sen ALAsset bir URL çıkarabilir, ancak tüm dosya formda,
varlıklar-kütüphane aynıdır:? //asset/asset.JPG id = 1000000001 & ext = JPG
nedense farklı dosya adları gerekiyorsa, bir iç-dış paradigma yapmayı deneyin: bir ALAsset içeriğini okumak için bir dosya adı gerekmez
#import <Foundation/Foundation.h>
@interface NSURL (NSURL_Asset)
- (NSURL*) toExternalForm;
- (NSURL*) fromExternalForm;
- (NSString*) toExternalFilename;
@end
#import "NSURL+Asset.h"
#import "URLParser.h" // from http://iphone.demay-fr.net/2010/04/parsing-url-parameters-in-a-nsstring/
static NSString *const EXTERNAL_TOKEN = @"/assetExternalForm/";
@implementation NSURL (NSURL_Asset)
// assets-library://asset/asset.JPG/assetExternalForm/1000000001.JPG -> assets-library://asset/asset.JPG?id=1000000001&ext=JPG
- (NSURL*) fromExternalForm {
if([self.scheme isEqualToString:@"assets-library"]) {
NSRange slash = [self.absoluteString rangeOfString:EXTERNAL_TOKEN options:NSBackwardsSearch];
if(slash.location != NSNotFound) {
NSRange dot = [self.absoluteString rangeOfString:@"." options:NSBackwardsSearch];
if(dot.location != NSNotFound) {
NSString* extention = [self.absoluteString substringFromIndex:(dot.location + dot.length)];
NSString* identifier = [self.absoluteString substringWithRange:NSMakeRange(slash.location + slash.length, dot.location - (slash.location + slash.length))];
return [NSURL URLWithString:[NSString stringWithFormat:@"%@?id=%@&ext=%@", [self.absoluteString substringToIndex:slash.location], identifier, extention]];
}
}
}
return self;
}
// assets-library://asset/asset.JPG?id=1000000001&ext=JPG -> assets-library://asset/asset.JPG/assetExternalForm/1000000001.JPG
- (NSURL*) toExternalForm {
if([self.scheme isEqualToString:@"assets-library"]) {
NSRange range = [self.absoluteString rangeOfString:@"?"];
if(range.location != NSNotFound) {
URLParser *parser = [[[URLParser alloc] initWithURLString:self.absoluteString] autorelease];
NSString* extention = [parser valueForVariable:@"ext"];
NSString* identifier = [parser valueForVariable:@"id"];
if(extention != NULL && identifier != NULL) {
return [NSURL URLWithString:[NSString stringWithFormat:@"%@%@%@.%@", [self.absoluteString substringToIndex:range.location], EXTERNAL_TOKEN, identifier, extention]];
}
}
}
return self;
}
// assets-library://asset/asset.JPG?id=1000000001&ext=JPG -> 1000000001.JPG
- (NSString*) toExternalFilename {
if([self.scheme isEqualToString:@"assets-library"]) {
NSRange range = [self.absoluteString rangeOfString:@"?"];
if(range.location != NSNotFound) {
URLParser *parser = [[[URLParser alloc] initWithURLString:self.absoluteString] autorelease];
NSString* extention = [parser valueForVariable:@"ext"];
NSString* identifier = [parser valueForVariable:@"id"];
if(extention != NULL && identifier != NULL) {
return [NSString stringWithFormat:@"%@.%@", identifier, extention];
}
}
}
return NULL;
}
@end
not. Bunun için ALAsset.defaultRepresentation.getBytes yöntemini kullanın.
iOS 5.0'dan dosyayı ALAssetRepresentation Class'tan alabilirsiniz.
ALAssetRepresentation *rep = [anAssetItem defaultRepresentation];
NSString *fileName = [rep filename];
@Thomas: E-postaya ek olarak birden fazla resim eklemek için dosya adlarına ihtiyacım var. Bu dosya adlarına ALAssets aracılığıyla nasıl erişilir? teşekkürler – jarryd
MFMailComposeViewController.addAttachmentData yönteminin ALAsset'in NSData'sına ve sonra 'herhangi bir' dosya adına ve mimeType'a ihtiyacı vardır. Bu yüzden, sadece '1000000001.JPG' dosya adını döndürmek için yukarıdakiExExForm yöntemini değiştiririm ve dosya adı uzantısından mimeType, '.JPG' -> image/jpeg'ye eşlenen bir yöntem oluşturur. – ThomasRS
@Thomas: Bu nasıl kullanılmalı? Geçerli sınıfımda sadece toExternalForm yöntemini kullanabilir miyim, yoksa @IMplementation NSURL nedir? Eğer mevcut sınıfımda kullanabiliyorsam (sadece yöntem), self.scheme nedir? Çok teşekkürler. – jarryd