不同的 web 服务调用不同的视图控制器 Restkit

Posted

技术标签:

【中文标题】不同的 web 服务调用不同的视图控制器 Restkit【英文标题】:Different web service calls for different view controllers Restkit 【发布时间】:2012-08-07 07:41:58 【问题描述】:

我是一名 asp.net 开发人员并开始学习目标 c。几天来一直在努力寻找解决方法:

我对 ios 开发完全陌生,如果我的问题听起来很愚蠢,请原谅我。

我有 2 个表格视图控制器:

AnnouncementsTableViewController 和 NewsTableViewController。

对于这些控制器中的每一个,我使用 rest 工具包调用 Web 服务: 这是我在 NewsTableViewController 中的代码

- (void)viewDidLoad

[super viewDidLoad];
[self sendRequest];


- (void)sendRequest


//set the base URL
RKURL *baseURL = [RKURL URLWithBaseURLString:@"http://someurl.com/WcfDataService.svc"];
NSString *format=@"json";
NSString *un = @"blah";
NSString *pw = @"blah";

RKObjectManager *objectManager1 = [RKObjectManager objectManagerWithBaseURL:baseURL];
objectManager1.client.baseURL = baseURL;


NSDictionary *queryParams;
queryParams = [NSDictionary dictionaryWithObjectsAndKeys:format,@"format", nil];

objectManager1.client.username=un;
objectManager1.client.password=pw;

//set news mapping

RKObjectMapping *newsMapping = [RKObjectMapping mappingForClass:[News class]];


[newsMapping setSetDefaultValueForMissingAttributes:true]; 
[newsMapping mapKeyPath:@"NEWSTITLE" 
            toAttribute:@"name"]; 

[newsMapping mapKeyPath:@"NEWSBODY" 
            toAttribute:@"newsBody"]; 


 RKURL *newsURL = [RKURL URLWithBaseURL:[objectManager1 baseURL] resourcePath:@"/NEWS"   queryParameters:queryParams];


 [objectManager1 loadObjectsAtResourcePath:[NSString stringWithFormat:@"%@?$%@", [newsURL resourcePath], [newsURL query]] usingBlock:^(RKObjectLoader *loader) 

 

     [loader.mappingProvider setObjectMapping:newsMapping forKeyPath:@"d"];

     loader.method = RKRequestMethodGET;

     loader.delegate = self;

     loader.userData=@"NewsData";
 ];



- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error

NSLog(@"Error: %@", [error localizedDescription]);


- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response 
NSLog(@"response code: %d", [response statusCode]);


- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects

NSString* source = (NSString*) objectLoader.userData;

NSLog(@"objects[%d]", [objects count]);
NSLog(@"%@", source);
data2 = objects;


 [self.tableView reloadData];


我在 AnnouncementsViewController 上执行与上面完全相同的代码(只是更改了基本 URL 和映射)。

问题是它只加载到 newstableviewcontroller 而不是公告。

我已阅读此https://github.com/RestKit/RestKit/wiki/Using-Multiple-Base-URLs-%28and-Multiple-Object-Managers%29

但似乎无法理解并应用于我的代码。

我希望有人能解释一下!

最好的问候, 六国

【问题讨论】:

打开日志,看看它告诉你什么:RKLogConfigureByName("RestKit/Network", RKLogLevelTrace); RKLogConfigureByName("RestKit/ObjectMapping", RKLogLevelTrace); @PauldeLange 感谢您的评论。添加了 RKLogLevelTrace 和 RKLogConfigureByName。对于 newstablecontroller,它从 web 服务返回数据,但对于 Advertisementstablecontroller,它什么也不返回。他们都在返回数据,但不是同时返回。我错过了什么? 传出 URL 是否正确?您可以将该 URL 放入 REST 客户端并取回数据吗? @PauldeLange 如果我注释掉第一个 tableviewcontroller 上的代码,第二个 viewcontroller 工作正常。反之亦然。这意味着传出 URL 没有问题。 你将不得不发布 RESTkit 日志 【参考方案1】:

@PauldeLange 感谢您花时间回复。我终于修好了。这条线就是魔法:

 RKObjectManager *objectManager =  [RKObjectManager sharedManager];

【讨论】:

以上是关于不同的 web 服务调用不同的视图控制器 Restkit的主要内容,如果未能解决你的问题,请参考以下文章

我们能否根据 Mediatype 加载不同的安全配置,即一种 REST 和一种用于 Web?

Spring的Restful

通过不同域上的 REST Web 服务进行用户身份验证 - asp.net

我如何在不同的控制器中调用方法,包括使用 mvc 6 的参数

具有不同参数的 Laravel REST 路由

Tomcat 和 spring-security 中的 Web 应用程序和 REST 服务 SSO