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

| 我正在编写一个iPhone应用程序,我最终决定使用RestKit作为连接到REST服务的框架。 我正在考虑的构建方式是让应用程序中的Controller与RestKit完全无关。例如。如果有登录屏幕,则在通常的RestKit场景中(基于示例程序以及RestKit开发人员创建的少量博客条目),您将让控制器实现RKRequestDelegate协议,并使用RKClient在Controller传递中调用服务自我(控制器)作为委托。我想在开发控制器和视图的用户中隐藏它。 我在想的是以下内容。我将有一个LoginService,它将登录用户。将有协议LoginServiceDelegate,它具有成功和失败的两种方法。控制器可以实现LoginServiceDelegate并在LoginService中调用login方法,并获取成功或失败回调。但是,为此,我将需要某种方式让我的LoginService将调用委派回控制器。 RestKit不允许我执行此操作,这是我能够执行此操作的唯一方法,方法是使用LoginServiceDelegate初始化LoginService,将该委托存储为属性,并在成功登录或失败时在委托中调用适当的方法。 这样可以将Controller代码库保持在最低限度,并完全隐藏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
干杯!     
已邀请:
我是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方法中,您可以做几件事: 取消委托,这样您就不会因回调而崩溃 要求请求队列取消所有请求:
[[RKRequestQueue sharedQueue] cancelRequestsWithDelegate:self];
从内存管理/内部管理的角度来看,这就是您需要担心的所有事情。我通常总是做的另一件事是为身份验证生命周期事件创建通知。根据我的经验,您总是需要观察它们来更新UI。 您走在正确的道路上,设计很好。 最好, 布莱克     

要回复问题请先登录注册