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;
- 将datestring转换为NSDate
- 当iOS 10中的UNUserNotificationCenterDelegate新通知到达时,如何删除先前发送的通知?
- 认识iOS开发人员Pere Daniel Prieto
- 如何获得苹果手表唯一的ID或UDID?
- 在Swift的财产申报中引用自我
- 离子2 Facebook的login – '应用程序不安装'和'没有login'&'给定的URL是不允许的'错误
- 如何在每个uicollectionviewcell中分析不同的字典数组。
- 自定义viewcontroller委托不工作
- Google Maps iOS rightCalloutAccessoryView更换?