RestKit 0.9.3 app结构

感谢提前和道歉,因为newbi问题。

我是restkit和ios开发的新手。

我的问题在哪里放置实体的映射。

在appdelegate ..我知道如何做到这一点但是我如何从任何viewcontroler访问对象映射。

我也尝试在对象中进行映射,但RKobject已被弃用,所以现在我必须从NSObject扩展{但我真的不知道在哪里放置这种方法的映射。

另外放置RKObjectManager的最佳位置在哪里,我是否必须在每个视图控制器中创建一个新实例?

希望你能特别帮我解决映射问题。

对于使用RKObjectManager,只有在调用objectManagerWithBaseURL方法时才创建实例。 在你的appDelegate中。

RKObjectManager * restKitManager = [RKObjectManager objectManagerWithBaseURL:@"http://toto/v1/ui"]; 

在您可以使用[RKObjectManager sharedManager]访问管理器之后,只需在您想要使用它的对象中导入RestKit:

 [RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeJSON; 

就个人而言,我只是为了管理映射而创建一个Object,我可以给你一个我的登录映射方法的例子:

 -(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的层,在我的视图中,我调用了与resouces相对应的方法。

如果你想澄清一些观点,请告诉我。 (如果你需要一些帮助,你想要映射特定的例子详细信息)。

编辑其他问题:

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  

编辑@Neruja Joseph:

  • BESessionManager是我的数据管理器,我保留了Restkit加载的所有数据。 这个对象是单身人士。 因此,如果我导入此对象,则可以在我的所有视图中访问此对象的单个实例:

    导入“BESessionManager.h”

  • 所以,在我的回调函数中,我将数据保存在我的BESessionManager中,当它完成时,我从我的回调函数发送通知:

    [[NSNotificationCenter defaultCenter] postNotificationName:kSuccessLoginPostLogin object:nil];

  • 在我看来谁需要显示数据或使用数据我按顺序采取这个:

1 – 如果我第一次使用restkit,当我启动应用程序时,我使用’mapping”序列化’和全局选项初始化我的restKit管理器作为baseUrl,certificatValidation,serializationMIMEType,日志配置,…我的BERestKitConfig是谁单身人士也是。

2 – 如果我有登录服务,我有另一个名为BEServiceUser的单例,在这一个我为每个相关服务添加一个方法进行登录。 我们可以 – (void)postLogIn – (void)getLogout – (void)getUserInfo …

 #import  // Mandatory class for services #import  #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  { 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;