Ios RestKit 0.9.3应用程序结构

Ios RestKit 0.9.3应用程序结构,ios,mapping,restkit,Ios,Mapping,Restkit,提前感谢并道歉,因为newbi提出了问题 我是restkit和ios开发的新手 我的问题是把实体的映射放在哪里 在appdelegate中。。我知道如何执行此操作,但如何从任何ViewController访问对象映射 我也尝试过在对象中进行映射,但是RKobject被弃用,所以现在我必须从NSObject{扩展,但是我真的不知道用这种方法将映射放在哪里 另外,放置RKObjectManager的最佳位置在哪里?我是否必须在每个视图控件中创建一个新实例 希望您能在映射方面特别帮助我。对于使用RKO

提前感谢并道歉,因为newbi提出了问题

我是restkit和ios开发的新手

我的问题是把实体的映射放在哪里

在appdelegate中。。我知道如何执行此操作,但如何从任何ViewController访问对象映射

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

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


希望您能在映射方面特别帮助我。

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

RKObjectManager * restKitManager = [RKObjectManager objectManagerWithBaseURL:@"http://toto/v1/ui"];
在您可以使用[RKObjectManager sharedManager]访问manager之后,只需在您想要使用它的对象中导入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>
3-如果结果良好,则在我的视图中调用OnLoginSAccess方法。因此,我可以从会话管理器中获取视图中的数据,如下所示:

[BESessionManager getInstance].auth;

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

RKObjectManager * restKitManager = [RKObjectManager objectManagerWithBaseURL:@"http://toto/v1/ui"];
在您可以使用[RKObjectManager sharedManager]访问manager之后,只需在您想要使用它的对象中导入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>
3-如果结果良好,则在我的视图中调用OnLoginSAccess方法。因此,我可以从会话管理器中获取视图中的数据,如下所示:

[BESessionManager getInstance].auth;

hi非常清楚,谢谢你=),只有几个问题,如果你在一个层中(不在视图中)有restkit的所有业务逻辑,你如何得到restkit响应,例如:-(void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)对象,如果我使用[RKObjectManager sharedManager]在我的appdelegate中,然后在我的viewcontrollers中,我只需要导入restkit。h正确吗?。谢谢!!!第一个问题:我将返回的对象存储在我的sessionManager中,它是一个单例,然后我发送一个NotiAction。当我的viewController收到此通知时,它会调用一个methode,然后在我的sessionMa中搜索数据nager.For use[RKObjectManager sharedManager]在您的viewController中添加#import in ExampleViewController.hHey谢谢,我遵循了您的guiles和您的应用程序结构它工作得很好谢谢..您好,非常清楚,谢谢u=),如果您在一个层中(不在视图中)有restkit的所有业务逻辑,只需问几个问题如何获得restkit响应,例如:-(void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)对象,如果使用[RKObjectManager sharedManager]在我的appdelegate中,然后在我的viewcontrollers中,我只需要导入restkit。h正确吗?。谢谢!!!第一个问题:我将返回的对象存储在我的sessionManager中,它是一个单例,然后我发送一个NotiAction。当我的viewController收到此通知时,它会调用一个methode,然后在我的sessionMa中搜索数据nager.在您的viewController中使用[RKObjectManager sharedManager]添加#导入示例viewController.hHey谢谢,我遵循了您的guiles和您的应用程序结构它工作得很好谢谢。。