我正在使用RestKit来提取新闻源,它可用于提取Feed。我使用了Master Detail视图,它在控制台中显示了多个Feed,但只显示了UITableView中的1个Feed(仅限1个单元格)
这是我的代码
@interface MasterViewController (){
NSArray *feedObjects;
NSMutableArray *feedArray;
}
@property NSMutableArray *objects;
@end
@implementation MasterViewController
- (void)awakeFromNib {
[super awakeFromNib];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
self.clearsSelectionOnViewWillAppear = NO;
self.preferredContentSize = CGSizeMake(320.0, 600.0);
}
}
- (void)viewDidLoad {
[super viewDidLoad];
feedArray = [[NSMutableArray alloc]init];
[self configureRestKit];
// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;
self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(RKResponseDescriptor *)responseDescriptor {
RKObjectMapping *bodyMapping = [RKObjectMapping mappingForClass:[BaseClass class]];
[bodyMapping addAttributeMappingsFromArray:@[@"body",@"title"]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:bodyMapping method:RKRequestMethodAny pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
return responseDescriptor;
}
-(void)configureRestKit{
NSURL *baseURL = [NSURL URLWithString:@"http://urlExample"];
NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];
RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[[self responseDescriptor]]];
[objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
feedObjects = mappingResult.array;
[feedArray addObject:feedObjects];
[self.tableView reloadData];
RKLogInfo(@"Load collection of Feeds: %@", mappingResult.array);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
RKLogError(@"Operation failed with error: %@", error);
}];
[objectRequestOperation start];
}
#pragma mark - Table View
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return feedArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSMutableArray *feedarray = feedArray[indexPath.row];
BaseClass *feedO = feedarray[0];
cell.textLabel.text = [NSString stringWithFormat:@"%@",feedO.title];
return cell;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
}
如果有人能帮助我,那会很棒,我已经尝试将mappingResults添加到NSArray而不是NSMutableArray,但这会以我尝试的方式打破程序。
由于
答案 0 :(得分:1)
当然它确实 - 你在这里只向你的数组添加一个对象:
[feedArray addObject:feedObjects];
这意味着你的函数返回行数:
feedArray.count == 1
你想要做的是将所有结果分别添加到你的NSMutableArray中,或者甚至使用你从响应中直接获得的NSArray作为数据源 - 所以你有一个只有1个深度级别的NSArray。
[feedArray addObjectsFromArray:feedObjects]
实际上,在您的情况下,我没有理由同时保留feedObjects和feedArray,您可以丢弃feedArray并在任何地方使用feedObjects。