SpaceFactoryNetworking 0.0.2

SpaceFactoryNetworking 0.0.2

测试测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Dalton Claybrook 维护。



一组有用的类,用于获取和持久化文件数据。它基于 NSURLSession

功能

  • 直接从 NSURLNSURLRequest 将数据下载到磁盘。
  • 应用挂起时文件会继续下载。
  • 数据会自动移动到磁盘上的持久存储。
  • 可以使用标准的 iOS 磁盘加密来加密数据。
  • 如果受保护文件访问不可用,数据将在稍后日期安排加密。
  • 指定一个字节的磁盘大小限制。如果磁盘上的数据超过此限制,将根据文件的 最后访问日期文件大小 选择特定的文件并删除。
  • 在获取文件时指定一个 标识符。此标识符可以用来检查磁盘上文件的存在,或者删除文件。
  • 为每个文件指定一个可选的 文件组,以将其与其他文件关联起来。
  • 为获取指定一个 任务优先级
  • 使用 标识符文件组 手动驱逐文件,驱逐 文件组 中所有的文件,或者驱逐整个磁盘缓存。
  • 忽略正在运行的获取操作的结果。这将卸载完成处理程序,但继续下载文件。
  • 如果正在进行获取操作,并且为相同的资源初始化了另一个获取,则第二个完成处理程序将安装到正在进行的获取上,从而防止数据重复。
  • 将现有数据注入到文件管理器以进行持久化。
  • 图像管理器 使用 文件管理器 专门获取 / 持久化图像数据。

使用方法

初始化 & 配置

self.fileManager = [[SFSFileManager alloc] init];
self.fileManager.usesEncryptionByDefault = YES;
self.fileManager.diskSizeLimit = 512 * 1024 * 1024; // 512 MB

最简单的获取

NSURL *url = [NSURL URLWithString:@"http://placekitten/600/500"];
[self.fileManager fetchFileDataAtURL:url withCompletion:^(NSURL *fileURL, NSError *error) {

    // data fetched using '[url absoluteString]' as the identifier 
    // and 'SFSFileManagerDefaultFileGroup' as the file group
}];

复杂的获取

NSURL *url = [NSURL URLWithString:@"http://myapi.com/users"];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[request setValue:<#auth string#> forHTTPHeaderField:@"Authorization"];

SFSFileFetchRequest *request = [SFSFileFetchRequest request];
request.urlRequest = urlRequest;
request.identifier = @"12345";
request.fileGroup = @"userDataGroup";
request.encryptionPolicy = SFSFileFetchRequestEncryptionPolicyUseEncryption;
request.taskPriority = SFSFileFetchRequestTaskPriorityHigh;

__typeof__(self) __weak weakSelf = self;
id<SFSTask> task = [self.fileManager fetchFileDataUsingFetchRequest:request withCompletion:^(NSURL *fileURL, NSError *error) {

    [weakSelf useFileAtURL:fileURL error:error];
}];

// Some time later...

if ([task isRunning])
{
    [task ignoreResults]; //will cause the above completion block to not be called, but will not cancel the request.
    // or
    [task cancelRequest];
}

图像管理器

// using 'nil' causes a file manager to be created for you.
self.imageManager = [[SFSImageManager alloc] initWithFileManager:nil]; 

NSURL *url = [NSURL URLWithString:@"http://placekitten/600/500"];

__typeof__(self) __weak weakSelf = self;
[self.imageManager fetchImageAtURL:url withCompletion:^(UIImage *image, NSError *error) {

    // completion is executed on the main thread.
    weakSelf.imageView.image = image;
}];

集成

集成 SpaceFactoryNetworking 最简单的方法是使用 CocoaPods

# Example Podfile
pod 'SpaceFactoryNetworking'

否则,您可以克隆此仓库,并从 'SpaceFactoryNetworking/Core' 文件夹导入文件。

协作

欢迎使用为该项目提交拉取请求。如果您考虑这样做,请通过[email protected]与我联系。我想了解一下。

潜在添加项
  • 单元测试(非常需要)
  • 示例应用中需要更多屏幕来演示功能
  • 回调以报告下载进度
已知问题
  • 如果保护文件在应用处于后台且设备锁定时被访问,文件访问可能不会优雅地失败。