У меня есть вложенные данные (NSDictionary), которые я получаю с сервера. Я заполняю свое представление таблицы только первым уровнем данных. Теперь мне нужно открыть определенные вложенные данные, нажав на определенную ячейку. Вот пример данных:Отобразить представление таблицы с вложенными данными в объекте c
treeItem = (
{
name = "smth";
items = {
treeItem = {
name = "smth";
items = {
treeItem = {
name = "smth";
items = {}
};
},
treeItem = {
name = "smth";
items = {}
};
};
};
},
treeItem = {
name = "smth";
items = {
treeItem = {
name = "smth";
items = {}
};
};
};
}
};
})
Как видите, вложенные данные (элементы) могут быть разными и не иметь ограничений. Я заполнил ячейки представления таблицы значением ключа «name». Каждый «элемент» состоит из «treeItem», и каждый из них имеет собственное «имя». Мне нужно заполнить ячейки «именем» из моего NSDictionary. Если «items» пуст, он просто ничего не делает. Вот мой код "MainTableViewController.m":
#import "MainTableViewController.h"
#import "XMLDictionary.h"
#import "SearchResultsViewController.h"
@interface MainTableViewController() <UISearchResultsUpdating>
@property (strong, nonatomic) NSMutableArray *data;
@property (strong, nonatomic) UISearchController *controller;
@property (strong, nonatomic) NSArray *results;
@end
@implementation MainTableViewController
{
NSDictionary *xmlDoc;
NSDictionary *name;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self WebServiceSyncCall];
SearchResultsViewController *searchResults = (SearchResultsViewController *)self.controller.searchResultsController;
[self addObserver:searchResults forKeyPath:@"results" options:NSKeyValueObservingOptionNew context:nil];
}
- (void) WebServiceSyncCall{
//Response data object
NSData *returnData = [[NSData alloc]init];
//Build the Request
NSString *param = @"params";
NSString *postString = [NSString stringWithFormat:@"request=%@",param];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"url"]];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[postString length]] forHTTPHeaderField:@"Content-length"];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
//Send the Request
returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
bool debug = YES;
xmlDoc = [NSDictionary dictionaryWithXMLData:returnData];
name = [xmlDoc valueForKeyPath:@"TreeItem.name"];
if (debug && returnData) {
// NSLog(@"Response >>>> %@", name);
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSMutableArray *)data {
if (!_data){
_data = [[NSMutableArray alloc]init];
_data=[name mutableCopy];
}
return _data;
}
- (UISearchController *)controller{
if(!_controller){
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
SearchResultsViewController *resultsController = [storyboard instantiateViewControllerWithIdentifier:@"SearchResults"];
_controller = [[UISearchController alloc]initWithSearchResultsController:resultsController];
_controller.searchResultsUpdater = self;
}
return _controller;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.data.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
// Configure the cell...
cell.textLabel.text = [self.data objectAtIndex:indexPath.row];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
}
#pragma - Search Results Updater
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{
self.results = nil;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [cd] %@", self.controller.searchBar.text];
self.results = [self.data filteredArrayUsingPredicate:predicate];
}
- (IBAction)searchButtonPressed:(id)sender {
[self presentViewController:self.controller animated:YES completion:nil];
}
@end
Что я могу сделать? Любые советы, идеи или советы.
Посмотрите на RATreeView https://github.com/Augustyniak/RATreeView – Frankie