Hoist 0.1.2

Hoist 0.1.2

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

Will Townsend 维护。



Hoist 0.1.2

  • Will Townsend

来自 Hoist Apps 网站

Hoist 的托管和 API 设置旨在使您的开发变得更加容易,而不会剥夺您的控制权。

这是您 iOS 项目中的 Hoist 客户端库。使用 Hoist 作为对象的数据存储库。

开始

或者在 Example 文件夹中的示例项目中查看示例。

用法

目前,我只实现了 文档 中找到的 data.hoi.io API 方法。

我将在将来努力添加用户、通知和文件 API。

Hoist.h

我讨厌那些剥夺太多控制权的库,与 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.h

设计为可子类化,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;
自动解析 NSDate

任何 HoistObject 日期将自动以 RFC3339 日期格式解析/存储。这是 Hoist 存储日期 createdAtupdatedAt 使用的相同日期格式。

如果您希望以不同的格式解析/存储自定义对象属性中的日期,可以这样做!您需要做的就是在自己的 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.mBlogPost.h 中的 HoistObject。

要求

项目针对 iOS7+ 构建

作者

Will Townsend, [email protected], @vfxguynz

许可

Hoist 提供 MIT 许可。请参阅 LICENSE 文件以获取更多信息。