我正在编写一个iPhone应用程序,最后我决定使用RestKit作为连接REST服务的框架.
我想构建的方式是让我的应用程序中的控制器与RestKit完全无关.例如.如果我有一个登录屏幕,在通常的RestKit场景中(基于示例程序以及RestKit开发人员创建的一些博客条目),您将让控制器实现RKRequestDelegate协议并使用RKClient在Controller传递中调用服务自我(控制者)作为代表.我想隐藏用户开发控制器和视图.
我在想的是以下内容.我将有一个登录用户的LoginService.会有协议LoginServiceDelegate,它有两个成功和失败的方法.Controller可以实现LoginServiceDelegate并在LoginService中调用login方法并获得成功或失败回调.但是要做到这一点,我需要一些方法让我的LoginService将调用委托给控制器.RestKit不允许我这样做,这是我能够通过使用LoginServiceDelegate初始化LoginService,将该委托存储为属性并在成功登录或失败时在委托中调用适当的方法来实现此目的的唯一方法.
这使我的Controller代码库保持最小,并完全隐藏了LoginService的工作方式以及它内部使用的框架.委托人的使用也使Controller与模型分离,因此我们有一个很好的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
Run Code Online (Sandbox Code Playgroud)
干杯!!!