测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2015年3月 |
由 Mattt 维护。
依赖 | |
AFNetworking | ~> 1.3.2 |
InflectorKit | >= 0 |
TransformerKit | >= 0 |
使用 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
。
您需要做的就是告诉 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。
platform :ios, '5.0'
pod 'AFIncrementalStore'
请注意,指定 iOS 5.0 作为平台;不指定 5.0 将导致 CocoaPods 失败并显示以下消息:
[!] AFIncrementalStore 与 iOS 4.3 不兼容。
AFIncrementalStore 由 Mattt Thompson 创建。
关注 AFNetworking 在 Twitter(@AFNetworking)
AFIncrementalStore 和 AFNetworking 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。