使用 RestKit 拉取 2 个 API

Posted

技术标签:

【中文标题】使用 RestKit 拉取 2 个 API【英文标题】:Pull 2 APIs with RestKit 【发布时间】:2014-02-22 22:30:05 【问题描述】:

我需要帮助使用 RestKit 引入两个 API。

我已经对 API1 进行了建模,并且已经正确引入。

问题是试图弄清楚如何将 API2 拉入ViewController

具体来说,我已经设置了模型类,但是在将显示 API1 + API2 的结果的 ViewController 中,我不知道如何将它放入我的viewDidLoad

谢谢!

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    // RestKit
    NSString *baseURL = @"http://api.firstwebsite.com/v1";
    RKObjectManager *manager = [RKObjectManager sharedManager];

    if (!manager) 
        manager = [RKObjectManager objectManagerWithBaseURLString:baseURL];
        manager.client.serviceUnavailableAlertEnabled = YES;
        manager.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
     else 
        manager.client.baseURL = [RKURL URLWithString:baseURL];
    

    return YES;

WebListViewController.m

@property (strong, nonatomic) NSArray *hArray;

- (void)viewDidLoad

    [super viewDidLoad];
    [[RKObjectManager sharedManager] loadObjectsAtResourcePath:
    [NSString stringWithFormat:
    @"/something/?limit=100&something=%@&something=%@&apikey=xxxx", var1, var2]
    usingBlock:^(RKObjectLoader *loader) 
        loader.onDidLoadObjects = ^(NSArray *objects)

            hArray = objects;

            [_tableView reloadData];

        ;
        [loader.mappingProvider setMapping:[Fe mapping] forKeyPath:@"fe"];
        loader.onDidLoadResponse = ^(RKResponse *response)
            //NSLog(@"BodyAsString: %@", [response bodyAsString]);
        ;
    ];

【问题讨论】:

【参考方案1】:

将您的视图控制器(和应用程序委托)从数据来源的知识中抽象出来 - 他们不知道业务。应用程序代表不应该真正了解任何这些。视图控制器应该知道数据存在并且可以请求额外的数据,但这应该是内部应用数据模型,而不是外部模型或数据源。

所以,创建一个数据控制器。通常是单身人士。提供一个接口来获取/设置/请求/更新基于设置标准的数据模型。将所有调用视为异步完成回调块。

在内部,这个数据控制器可以管理多个对象管理器,每个对象管理器都有不同的基本 URL、映射和描述符,但这都是内部知识。

【讨论】:

谢谢韦恩!关于viewDidLoad 的问题有什么想法吗?我只是个菜鸟- 通常,向您的数据控制器发出两个请求并在每个完成处理程序中重新加载您的表(并且确实出现了)。 我还没有更新,它肯定在待办事项清单上,相信我- 好吧,如果你决定创建一个数据控制器,那是一个很好的升级机会。

以上是关于使用 RestKit 拉取 2 个 API的主要内容,如果未能解决你的问题,请参考以下文章

RestKit:用于 2 个具有关系的实体的不同 API

RestKit 2.0:映射-非唯一时的第二个实体为零

使用 RestKit 0.2x 创建两个独立的持久存储

RestKit:在注销时重置持久存储后映射了 0 个对象

如何使用 RestKit 正确测试映射(嵌套映射,对多)

动态属性作为在 iOS 中使用 Restkit 发布 JSON 的关键