ConvenientFileManager是一组分类,以简化使用(NS)FileManager
完成常见任务。
通过CocoaPods安装
要通过CocoaPods将ConvenientFileManager集成到您的Xcode项目中,请在您的Podfile中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'ConvenientFileManager'
然后,运行以下命令
$ pod install
需要CocoaPods 0.39.0+ 来构建ConvenientFileManager。
使用方法
ConvenientFileManager为您应用程序的沙盒中的Documents
(FileManager+Documents
)和Cache
(FileManager+Cache
)目录提供了一系列便利方法。这些扩展/分类提供了一套简化的接口,用于从这些目录中读取、写入和删除数据,比(NS)FileManager
提供的接口更易于使用,通过减少了关于您正在使用哪个目录的样板代码。
即使您已经有了读取、写入或删除数据的绝对路径,您也可以通过使用FileManager+Persistence
访问相同的方法集。
写入/保存
Swift
func writeImageToDisk(image: UIImage) {
if let imageData = UIImagePNGRepresentation(image) {
switch self.media.location.integerValue {
case .cache:
FileManager.writeToCacheDirectory(data: imageData, relativePath: self.media.name)
case .documents:
FileManager.writeDataToDocumentsDirectory(data: imageData, relativePath: self.media.name)
}
}
}
Objective-C
- (void)writeImageToDisk:(UIImage *)image
{
NSData *imageData = UIImagePNGRepresentation(image);
switch (self.media.location.integerValue)
{
case CFEMediaLocationCache:
{
[NSFileManager cfm_writeData:imageData toCacheDirectoryWithRelativePath:self.media.name];
break;
}
case CFEMediaLocationDocuments:
{
[NSFileManager cfm_writeData:imageData toDocumentsDirectoryWithRelativePath:self.media.name];
break;
}
}
}
检索
Swift
func retrieveImageFromMedia(media: CFEMedia) -> UIImage? {
var retrievedData: NSData?
switch media.location.integerValue {
case .cache:
retrievedData = FileManager.retrieveDataFromCacheDirectory(relativePath: media.name)
case .documents:
retrievedData = FileManager.retrieveDataFromDocumentsDirectory(relativePath: media.name)
}
guard let unwrappedRetrievedData = retrievedData else {
return nil
}
return UIImage.init(data: unwrappedRetrievedData)
}
Objective-C
- (UIImage *)retrieveImageFromMedia:(CFEMedia *)media
{
NSData *imageData = nil;
switch (media.location.integerValue)
{
case CFEMediaLocationCache:
{
imageData = [NSFileManager cfm_retrieveDataFromCacheDirectoryWithRelativePath:media.name];
break;
}
case CFEMediaLocationDocuments:
{
imageData = [NSFileManager cfm_retrieveDataFromDocumentsDirectoryWithRelativePath:media.name];
break;
}
}
return [[UIImage alloc] initWithData:imageData];
}
删除
Swift
func trashButtonPressed(sender: UIBarButtonItem) {
switch self.media.location.integerValue {
case .cache:
FileManager.deleteDataFromCacheDirectory(relativePath: self.media.name)
case .documents:
FileManager.deleteDataFromDocumentsDirectory(relativePath: self.media.name)
}
}
Objective-C
- (void)trashButtonPressed:(UIBarButtonItem *)sender
{
switch (self.media.location.integerValue)
{
case CFEMediaLocationCache:
{
[NSFileManager cfm_deleteDataFromCacheDirectoryWithRelativePath:self.media.name];
break;
}
case CFEMediaLocationDocuments:
{
[NSFileManager cfm_deleteDataFromDocumentDirectoryWithRelativePath:self.media.name];
break;
}
}
}
存在
同步地
Swift
func mediaAssetHasBeenDownloaded(media: CFEMedia) -> Bool {
var mediaAssetHasBeenDownloaded = false
switch self.media.location.integerValue {
case .cache:
mediaAssetHasBeenDownloaded = FileManager.fileExistsInCacheDirectory(relativePath: self.media.name)
case .documents:
mediaAssetHasBeenDownloaded = FileManager.fileExistsInDocumentsDirectory(relativePath: self.media.name)
}
return mediaAssetHasBeenDownloaded
}
Objective-C
- (BOOL)mediaAssetHasBeenDownloaded:(CFEMedia *)media
{
BOOL mediaAssetHasBeenDownloaded = NO;
switch (self.media.location.integerValue)
{
case CFEMediaLocationCache:
{
mediaAssetHasBeenDownloaded = [NSFileManager cfm_fileExistsInCacheDirectoryWithRelativePath:self.media.name];
break;
}
case CFEMediaLocationDocuments:
{
mediaAssetHasBeenDownloaded = [NSFileManager cfm_fileExistsInCacheDirectoryWithRelativePath:self.media.name];
break;
}
}
return mediaAssetHasBeenDownloaded;
}
异步地
Swift
FileManager.fileExistsAtPath(absolutePath: self.media.absoluteLocalPath) { (fileExists) in
if (!fileExists) {
//Yay!
} else {
//Boo!
}
}
Objective-C
[NSFileManager cfm_fileExistsAtAbsolutePath:self.media.absoluteLocalPath
completion:^(BOOL fileExists)
{
if (!fileExists)
{
//Yay!
}
else
{
//Boo!
}
}];
ConvenientFileManager附带了示例项目,提供了比上述更多细节。
ConvenientFileManager使用模块来导入/使用框架 - 您需要在项目中启用此功能。
##发现了问题?
如果有针对ConvenientFileManager的特定问题、功能请求或想发表评论,请在这里创建新问题。请注意,有关NSFileManager的一般问题应在Stack Overflow上提出。
鼓励并非常感激合并请求! 请尽量保持与现有代码风格的统一。如果您考虑对项目进行重大更改或增加,请提前通过新建问题进行沟通。这样可以让大家同步即将到来的更改,确保更改与项目的设计理念相符,并避免重复工作。