Hoist 的托管和 API 设置旨在使您的开发变得更加容易,而不会剥夺您的控制权。
这是您 iOS 项目中的 Hoist 客户端库。使用 Hoist 作为对象的数据存储库。
或者在 Example 文件夹中的示例项目中查看示例。
data.hoi.io
API 方法。我将在将来努力添加用户、通知和文件 API。
我讨厌那些剥夺太多控制权的库,与 Hoist 的标语并驾齐驱,这个库不会剥夺您的任何控制权,因此有两种方式可以使用这个库。
Hoist 类是一个单例,它将处理对 Hoist 的 HTTP 请求。只需将应用程序的 ApiKey 设置为在 Hoist 应用程序仪表板上找到的即可
[[Hoist shared] setApiKey:@"EZYRNDNOEEXGQWHNJLMJ"];
Hoist 类有一些用于获取、保存/更新和删除对象/模型的方法。
- (void)fetchObjectForType:(NSString *)type objectId:(NSString *)objectId completion:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completion;
- (void)fetchObjectsForType:(NSString *)type completion:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completion;
- (void)saveObject:(NSDictionary *)dictionary forType:(NSString *)type completion:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completion;
- (void)deleteObjectWithID:(NSString *)objectId forType:(NSString *)type completion:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completion;
- (void)deleteAllForType:(NSString *)type completion:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completion;
这些方法为您提供了编写自己的对象映射的能力。尽管如果您不想这么做...
设计为可子类化,HoistObject 类有一些辅助方法,使处理 Hoist 对象变得非常轻松。
创建一个与 Hoist 模型同名的 HoistObject
子类。例如,我们创建了一个 BlogPost
对象。
BlogPost
对象现在有一些使将其保存到 Hoist 变得非常简单的方法。
+ (void)fetchAllWithCompletion:(void (^)(NSArray *objects, HoistResponseStatusCode responseCode))completion;
+ (void)fetchByObjectId:(NSString *)objectId completion:(void (^)(id object, HoistResponseStatusCode responseCode))completion;
+ (void)deleteAll;
+ (void)deleteAllWithCompletion:(void (^)(HoistResponseStatusCode responseCode))completion;
只要属性名称与 JSON 键相同,就会将对象自动解码从 JSON 响应中。
如果您希望属性名称与JSON键不同,可以覆盖 - (NSDictionary *)propertyToJSONMappings
。只需确保您添加任何键到从 [super propertyToJSONMappings]
返回的 propertyToJSONMappings
中 - 请参阅示例项目以获取示例。
- (void)save;
- (void)saveWithCompletion:(void (^)(HoistResponseStatusCode responseCode))completion;
- (void)delete;
- (void)deleteWithCompletion:(void (^)(HoistResponseStatusCode responseCode))completion;
任何 HoistObject 日期将自动以 RFC3339 日期格式解析/存储。这是 Hoist 存储日期 createdAt
和 updatedAt
使用的相同日期格式。
如果您希望以不同的格式解析/存储自定义对象属性中的日期,可以这样做!您需要做的就是在自己的 HoistObject 子类中创建一个与您的日期属性同名的函数,同时在末尾添加 "DateFormat"。
例如,如果我们有一个 publishedDate
NSDate 属性在 BlogPost 对象上。我们需要定义一个 - (NSString *)publishedDateFormat
函数,并返回我们的自定义日期格式字符串 ("propertyName" + "Format")。然后我们就可以自动映射到/从该属性/json了!
不知道我解释得是否清楚,但在项目中有一个示例展示了如何将 BlogPost 的 publishedDate
映射到 json 键 jsonPubDate
,使用自定义日期格式 :)
这两个类使您能够轻松地完成此类操作
// Set the API Key
[[Hoist shared] setApiKey:@"EZYRNDNOEEXGQWHNJLMJ"];
// Fetch all BlogPosts
[BlogPost fetchAllWithCompletion:^(NSArray *objects, HoistResponseStatusCode responseCode) {
if (responseCode == HoistResponseStatusCodeOk) {
// If there isn't a BlogPost
if (![objects count]) {
// Let's create one, and save it
BlogPost *blogPost = [BlogPost new];
blogPost.title = @"Blog Post Title!";
blogPost.body = @"Body of the blog post.";
blogPost.views = @(0);
blogPost.draft = YES;
blogPost.publishedDate = [NSDate dateWithTimeIntervalSinceNow:-10000];
[blogPost save];
} else {
// Get the first BlogPost
BlogPost *blogPost = [objects firstObject];
// We can then change things and call save to update the object
blogPost.views = @([blogPost.views integerValue] + 1);
[blogPost saveWithCompletion:^(HoistResponseStatusCode responseCode) {
NSLog(@"Saved with: %@", NSStringFromHoistResponseStatusCode(responseCode));
}];
}
NSLog(@"%@", objects);
} else {
NSLog(@"%@", NSStringFromHoistResponseStatusCode(responseCode));
}
}];
请确保查看 BlogPost.m 和 BlogPost.h 中的 HoistObject。
项目针对 iOS7+ 构建
Will Townsend, [email protected], @vfxguynz
Hoist 提供 MIT 许可。请参阅 LICENSE 文件以获取更多信息。