对于使用 RKObjectManager,只有在调用 objectManagerWithBaseURL 方法时才能创建实例。在您的 appDelegate 中。
RKObjectManager * restKitManager = [RKObjectManager objectManagerWithBaseURL:@"http://toto/v1/ui"];
在您可以使用 [RKObjectManager sharedManager] 访问管理器后,只需将 RestKit 导入您想要使用它的对象中:
[RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeJSON;
我个人制作一个对象只是为了管理映射,我可以给你一个我的登录映射方法的例子:
-(void)mappingLogin
{
log_debug("mappingLogin")
RKObjectMapping * userMapping = [RKObjectMapping mappingForClass:[VOUser class]];
[userMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[userMapping mapKeyPath:@"ref" toAttribute:@"ref"];
[userMapping mapKeyPath:@"login" toAttribute:@"login"];
[userMapping mapKeyPath:@"mail" toAttribute:@"mail"];
RKObjectMapping * gatewayMapping = [RKObjectMapping mappingForClass:[VOGateway class]];
[gatewayMapping mapKeyPath:@"id" toAttribute:@"identifier"];
[gatewayMapping mapKeyPath:@"serial" toAttribute:@"serial"];
[gatewayMapping mapKeyPath:@"status" toAttribute:@"status"];
RKObjectMapping * authReturnMapping = [RKObjectMapping mappingForClass:[VOAuth class]];
[authReturnMapping mapKeyPath:@"sessionId" toAttribute:@"sessionId"];
[authReturnMapping mapKeyPath:@"user" toRelationship:@"user" withMapping:userMapping];
[authReturnMapping mapKeyPath:@"gateway" toRelationship:@"gateway" withMapping:gatewayMapping];
[[RKObjectManager sharedManager].mappingProvider setMapping:authReturnMapping forKeyPath:@""];
}
如果你看到最后一行,你可以看到我使用 [RKObjectManager sharedManager] 来设置我的映射,我没有创建其他实例。
这取决于代码的结构,但我没有在我的viewsController中直接使用restik,但我有一个管理RestKit的层,在我看来我调用了与资源对应的方法。
如果你想澄清一些观点,请告诉我。 (如果您需要一些关于您想要映射的特定示例详细信息对象的帮助)。
编辑其他问题:
1) 返回对象的使用示例:
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
log_debug("##### BackEnd - %@ - %i #####",objectLoader.resourcePath,objectLoader.response.statusCode)
if ([objectLoader.response isSuccessful]) {
if ([objectLoader wasSentToResourcePath:@"/auth"]) {
VOAuth * auth = [objects objectAtIndex:0];
[BESessionManager getInstance].auth = auth;
[[NSNotificationCenter defaultCenter] postNotificationName:kSuccessLoginPostLogin object: nil];
} else if ([objectLoader wasSentToResourcePath:@"/list1/0"]) {
log_debug("count %i",[objects count])
}
}
}
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
log_debug("!!!!! BackEnd - %@ - %i !!!!!",objectLoader.resourcePath,objectLoader.response.statusCode)
if ([objectLoader wasSentToResourcePath:@"/auth"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:kErrorLoginPostLogin object: nil];
}
}
2 ) 要使用 [RKObjectManager sharedManager],请在您的 Object .h 中导入 API
#import <RestKit/RestKit.h>
编辑@Neruja Joseph:
-
BESessionManager 是我的数据管理器,用于保存 Restkit 加载的所有数据。这个对象是一个单例。因此,如果我导入此对象,则在我的所有视图中都可以访问该对象的单个实例:
导入“BESessionManager.h”
-
所以,在我的回调函数中,我将数据保存在我的 BESessionManager 中,完成后,我从我的回调函数发送通知:
[[NSNotificationCenter defaultCenter] postNotificationName:kSuccessLoginPostLogin 对象:nil];
在我看来谁需要显示数据,或者使用数据我按顺序来:
1 - 如果我第一次使用 restkit,当我启动应用程序时,我会使用“映射”、“序列化”和全局选项作为 baseUrl、certificatValidation、serializationMIMEType、日志配置来初始化我的 restKit 管理器……有我的BERestKitConfig 也是单例。
2 - 如果我有登录服务,我还有另一个名为 BEServiceUser 的单例,在这个单例中,我为每个相关的登录服务添加了一个方法。我们可以有 -(void)postLogIn -(void)getLogout -(void)getUserInfo ...
#import <Foundation/Foundation.h>
// Mandatory class for services
#import <RestKit/RestKit.h>
#import "BESessionManager.h"
#import "BERestKitConfig.h"
// Value Objects
#import "VOUser.h"
#import "VOGateway.h"
#import "VOAuth.h"
// Send Objects
#import "SOAuth.h"
@interface BEServiceUser : NSObject <RKObjectLoaderDelegate> {
SOAuth * logObj;
}
@property (nonatomic, retain) SOAuth * logObj;
//Singleton
+(BEServiceUser *)getInstance;
+(void)resetInstance;
// CallBack
-(void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects;
-(void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error;
// Services
-(void)postLogin:(NSString*)login withPassword:(NSString*)password;
-(void)getLogout;
@end
以我的 viewDidLoad 为例:
[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(onLoginSuccess) name: kSuccessLoginPostLogin object: nil];
[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(onLoginError) name: kErrorLoginPostLogin object: nil];
[[BEServiceUser getInstance] postLogin:@"toto" withPassword:@"toto"];
3 - 如果结果好,我认为会调用 onLoginSuccess 方法。所以我可以像这样从我的会话管理器中获取我的视图中的数据:
[BESessionManager getInstance].auth;