AFIncrementalStore 0.5.1

AFIncrementalStore 0.5.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年3月

Mattt 维护。



 
依赖
AFNetworking~> 1.3.2
InflectorKit>= 0
TransformerKit>= 0
 

  • 作者
  • Mattt Thompson

使用 AFNetworking 进行 Core Data 持久化,做得正确

AFIncrementalStore 是一个 NSIncrementalStore 子类,它使用 AFNetworking 自动按需请求数据属性和关系。

AFIncrementalStore 只有几百行代码,位于单一的 {.h,.m} 文件对中,易于理解。将其集成到您的项目中非常简单--只需将您的 NSPersistentStore 替换为它即可。无需猴子补丁,也无需在您的模型上添加额外属性。

增量存储持久化

AFIncrementalStore 不直接持久化数据。相反,它管理一个持久存储协调器,可以配置为与任何数量的可选持久存储进行通信。

在 Twitter 示例中,添加了一个 SQLite 持久存储,它用于在启动之间持久化推文,并在网络请求完成的同时返回本地缓存的结果。

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Twitter.sqlite"];
NSDictionary *options = @{ NSInferMappingModelAutomaticallyOption : @(YES) };

NSError *error = nil;
if (![incrementalStore.backingPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

如果您的数据集更固定或临时,您可能想使用 NSInMemoryStoreType

将 Core Data 映射到 HTTP

您需要做的就是告诉 AFIncrementalStore 如何将 Core Data 映射到 HTTP 客户端。这些方法定义在 AFIncrementalStoreHTTPClient 协议中。

不必担心这看起来像是一项大量工作--如果您的网络服务是 RESTful,AFRESTClient 会为您做很多繁重的工作。如果您目标网络服务是 SOAP、RPC 或某种临时的,您可以使用这些协议方法轻松地将其连接起来。

- (NSDictionary *)representationsForRelationshipsFromRepresentation:(NSDictionary *)representation
                                                           ofEntity:(NSEntityDescription *)entity
                                                       fromResponse:(NSHTTPURLResponse *)response;

- (NSString *)resourceIdentifierForRepresentation:(NSDictionary *)representation
                                         ofEntity:(NSEntityDescription *)entity;

- (NSDictionary *)attributesForRepresentation:(NSDictionary *)representation
                                         ofEntity:(NSEntityDescription *)entity
                                     fromResponse:(NSHTTPURLResponse *)response;

- (NSURLRequest *)requestForFetchRequest:(NSFetchRequest *)fetchRequest
                             withContext:(NSManagedObjectContext *)context;

- (NSURLRequest *)requestWithMethod:(NSString *)method
                pathForObjectWithID:(NSManagedObjectID *)objectID
                        withContext:(NSManagedObjectContext *)context;

- (NSURLRequest *)requestWithMethod:(NSString *)method
                pathForRelationship:(NSRelationshipDescription *)relationship
                    forObjectWithID:(NSManagedObjectID *)objectID
                        withContext:(NSManagedObjectContext *)context;

入门

查看仓库中包含的示例项目。它们是以简单的示例演示了使用 Core Data 和 AFIncrementalStore 通信的应用程序,用于更正属性和关系。请注意,应用程序中没有任何显式的网络请求--所有这些操作都是通过 Core Data 自动完成的。

如果您想运行示例,请勿忘记使用 git submodule update --init 检出 AFNetworking。

要求

AFIncrementalStore 需要使用 Xcode 4.4,并配备 iOS 5.0 或 Mac OS 10.6 (具有现代 Cocoa 运行时的 64 位 SDK),以及 AFNetworking 0.9 或更高版本。

安装

将 AFIncrementalStore 添加到你的项目的推荐方法是使用 CocoaPods。

以下是一个示例 podfile,该 podfile 安装 AFIncrementalStore 及其依赖项 AFNetworking。

Podfile

platform :ios, '5.0'

pod 'AFIncrementalStore'

请注意,指定 iOS 5.0 作为平台;不指定 5.0 将导致 CocoaPods 失败并显示以下消息:

[!] AFIncrementalStore 与 iOS 4.3 不兼容。

致谢

AFIncrementalStore 由 Mattt Thompson 创建。

联系方式

关注 AFNetworking 在 Twitter(@AFNetworking

制作者

Mattt Thompson
@mattt

授权

AFIncrementalStore 和 AFNetworking 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。