首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iPhone应用程序中使用RestKit的最佳方式

在iPhone应用程序中使用RestKit的最佳方式
EN

Stack Overflow用户
提问于 2011-04-14 18:26:35
回答 1查看 8.5K关注 0票数 49

我正在编写一个iPhone应用程序,我最终使用decided来使用RestKit作为连接REST服务的框架。

我考虑构建的方法是让我的应用程序中的控制器对RestKit完全不可知。例如。如果我有一个登录屏幕,在通常的RestKit场景中(基于示例程序以及RestKit开发人员创建的少量博客条目),您将让控制器实现RKRequestDelegate协议,并使用RKClient调用控制器中传递self (控制器)作为委托的服务。我想对开发控制器和视图的用户隐藏这一点。

我想的是以下几点。我会有一个LoginService,这将登录用户。将会有协议LoginServiceDelegate,它有两个成功和失败的方法。控制器可以实现登录并调用LoginService中的LoginServiceDelegate方法,并获得成功或失败的回调。然而,要做到这一点,我需要一些方法让我的LoginService将调用委托回控制器。RestKit不允许我这样做,我唯一能做到这一点的方法是:用LoginServiceDelegate初始化LoginService,将该委托存储为属性,并在登录成功或失败时调用委托中的适当方法。

这使我的控制器代码库保持在最低限度,并完全隐藏了LoginService的工作方式以及它内部使用的框架。委托的使用也将控制器从模型中分离出来,所以我们有了一个很好的MVC。然而,我关心的是Model类保留Controller对象的含义,因为它持有委托。

您将如何使用RestKit?如果你认为我的方法很好,你会做些什么来让它变得更好?如果你不喜欢我的方法,我想要你的反馈,为什么你认为这不是一个好的做法。

下面的代码片段应该会让你有更好的想法

@protocol LoginServiceDelegate;

@interface LoginService : NSObject <RKRequestDelegate>{
    NSObject<LoginServiceDelegate> *_loginServiceDelegate;

}

@property (retain, nonatomic) NSObject <LoginServiceDelegate> *loginServiceDelegate;

- (id) initWithDelegate:(NSObject<LoginServiceDelegate>*) loginServiceDelegate;

- (void) login:(NSString *)username withPassword:(NSString *)password;

@end

@protocol LoginServiceDelegate
@optional

- (void) loginSuccess:(LoginInfo *) loginInfo;

- (void) loginFailure:(NSString *) message;

@end

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-14 21:01:04

我是RestKit的作者,我们提倡使用这样的模式在RestKit之上构建更高级别的抽象。我通常围绕模型对象构建回调函数,而不是创建新的LoginService类型的对象,但这两种方法都可以。在我的示例中,您将执行如下操作:

@implementation RKUser
- (void)loginWithDelegate:(NSObject<RKUserAuthenticationDelegate>*)delegate {}
@end

@protocol RKUserAuthenticationDelegate
- (void)userDidLogin:(RKUser*)user;
- (void)userDidFailLoginWithError:(RKUser*)user;
- (void)userDidLogout:(RKUser*)user
@end

在任何情况下,我建议的另一件事是将您的委托从保留更改为赋值。在你的dealloc方法中,你可以做一些事情:

  1. 空出委托,这样你就不会被回调崩溃
  2. 请求队列取消任何请求:

从内存管理/内部管理的角度来看,这就是您需要担心的全部问题。我通常要做的另一件事是为我的身份验证生命周期事件创建通知。在我的经验中,你总是需要观察它们来更新UI。

你走在正确的轨道上,设计也很好。

最好的,布莱克

票数 73
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5661842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档