有没有办法让我用两个单独的Web API填充一个UITableView
?我敢肯定有,但是我不太清楚。
目前,我正在从一种Web API中完美地提取信息。但是我需要从不同的方面汲取经验,然后将它们合并为一个UITableView
。
(我正在使用RestKit)
(我要集成的第二个API是Instagram,它将从用户帐户中提取图片/文字)
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
- (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]);
};
}];
}
我假设我需要在中做一些不同的事情AppDelegate.m
,baseURL
因为它将有两个不同的基本URL。
谢谢!将根据需要发布任何额外的代码!
编辑
根据alexandresoli的回答,这是到目前为止我已更新的内容,但仍需要以下方面的帮助:
WebListViewController.m
@property (strong, nonatomic) NSMutableArray *array;
@synthesize array;
- (void)callBothURLs {
// Call both #1 and #2 URL, not sure what specific code goes here
}
- (void)viewDidLoad {
[self callBothURLs];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// This is what I currently have, was pulling from a `Headlines` `NSArray` from web #1
return headlinesArray.count;
// I believe I need to change it to this next line...
//return array.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Not sure what to put here with the new `NSMutableArray`
}
编辑2
我已经为第一个网站设置了对象映射,因此我可以轻松地为Instagram API做到这一点。我所有的困惑/问题似乎都在WebListViewController中。无论如何,这里是一个映射示例。
映射
@interface Mapping : NSObject
@property (nonatomic, strong) Links *links;
@property (nonatomic, strong) NSString *headline;
@property (nonatomic, strong) NSArray *images;
+ (RKObjectMapping *) mapping;
@end
制图
@implementation Mapping
+ (RKObjectMapping *)mapping {
RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[self class] usingBlock:^(RKObjectMapping *mapping) {
[mapping mapKeyPathsToAttributes:
@"headline", @"headline",
nil];
[mapping hasMany:@"images" withMapping:[Images mapping]];
}];
return objectMapping;
}
@end
创建一个调用两个URL的方法,并使用addObject方法将每个URL的结果存储在同一NSMutableArray中。
NSMutableArray *array = [NSMutableArray new];
// for each object from URL 1, call [array addObject:object];
// for each object from URL 2, call [array addObject:object];
将此数组用作表视图的数据源;
根据要求更新:
更新2:
- (void)viewDidLoad
{
[super viewDidLoad];
_array = [NSMutableArray new];
// fetch data from url 1
NSArray *arrayUrl1 = [self fetchUrl1];
// add url1 data to array
for (NSString *str in arrayUrl1) {
[_array addObject:str];
}
// fetch data from url 2
NSArray *arrayUrl2 = [self fetchUrl2];
// add url2 data to array
for (NSString *str in arrayUrl2) {
[_array addObject:str];
}
}
- (NSArray *)fetchUrl1
{
return [NSArray array];
}
- (NSArray *)fetchUrl2
{
return [NSArray array];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// total number of objects in array
return [_array count];
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句