I'm trying to get my tableView (initial viewController) to refresh when I select a row from another tableView in a container.
When the row is selected, it parses a JSON file from a web server, saves it and store it in the docs directory. The tableView from the main view should be reloading with the new JSON file.
This is how it should be working:
OpenWorkViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath (NSIndexPath *)indexPath{
PFQuery *query = [PFQuery queryWithClassName:@"Travaux"];
[query whereKey:@"profID" equalTo:@"EAPFfaGSOE"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"form.json"];
for (PFObject *object in objects) {
PFFile *file = object[@"json"];
[file getDataInBackgroundWithBlock:^(NSData *jsonData, NSError *error) {
if (!error) {
self.jsonData = jsonData;
}
}];
}
[self.jsonData writeToFile:appFile atomically:YES];
ViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];
[vc viewDidLoad];
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];}
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
UITableView *form;
}
@property CGFloat shortQuestion;
@property CGFloat choiceQuestion;
@property CGFloat multipleQuestion;
@property (strong, nonatomic) NSMutableArray *numbersCell;
@property (strong, nonatomic) NSMutableArray *questionType;
@property (strong, nonatomic) NSMutableArray *inputsArray;
@property (strong, nonatomic) NSMutableDictionary *inputsDict;
@property (strong, nonatomic) NSString *indexAnswer;
@property (strong, nonatomic) NSString *formData;
-(void)readQuestions:(NSString *)path;
@end
ViewController.m (parts have been omitted, bc they are useless)
- (void)viewDidLoad {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"form.json"];
//NSLog(@"%s === %@", __PRETTY_FUNCTION__, filePath);
self.formData = filePath;
[self readQuestions:filePath];
UIView *shortView = [[[NSBundle mainBundle] loadNibNamed:@"ECFormShortQuestion" owner:self options:nil] objectAtIndex:0];
self.shortQuestion = [shortView bounds].size.height;
UIView *choiceView = [[[NSBundle mainBundle] loadNibNamed:@"ECFormChoiceQuestion" owner:self options:nil] objectAtIndex:0];
self.choiceQuestion = [choiceView bounds].size.height;
UIView *multipleView = [[[NSBundle mainBundle] loadNibNamed:@"ECFormMultipleQuestion" owner:self options:nil] objectAtIndex:0];
self.multipleQuestion = [multipleView bounds].size.height;
self.automaticallyAdjustsScrollViewInsets = NO; //important
[super viewDidLoad];}
-(void)readQuestions:(NSString *)path
{
//NSString *filePath =[[NSBundle mainBundle] pathForResource:@"input" ofType:@"json"];
self.numbersCell = [[NSMutableArray alloc] init];
self.questionType = [[NSMutableArray alloc] init];
self.inputsArray = [[NSMutableArray alloc] init];
self.inputsDict = [[NSMutableDictionary alloc] init];
if ([path length])
{
NSError *readError;
NSData *questionsData = [[NSData alloc] initWithContentsOfFile:path options:NSMappedRead error:&readError];
if (!readError)
{
NSError *parseError;
NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:questionsData options:NSJSONReadingMutableContainers error:&parseError];
if (!parseError && dictionary)
{
NSMutableDictionary *questionsDictionary = [dictionary objectForKey:@"questions"];
int number= -1; // Question number
//NSLog(@"%@",questionsDictionary);
for (NSMutableDictionary *singleQuestion in questionsDictionary)
{
NSString *questionType = [singleQuestion objectForKey:@"type"];
NSString *questionTitle = [singleQuestion objectForKey:@"title"];
NSMutableDictionary *inputs = [singleQuestion objectForKey:@"inputs"];
NSMutableArray *a = [NSMutableArray array];
for (NSDictionary *d in inputs)
{
NSArray *arr = [d allKeys];
NSString *theKey = [arr lastObject];
[a addObject:theKey];
}
self.indexAnswer = [NSString stringWithFormat:@"%d", ++number];
for (int i = 1;i<=[a count];i++)
{
[self.inputsDict setObject:a forKey:self.indexAnswer];
}
[self.numbersCell addObject:questionTitle];
[self.questionType addObject:questionType];
}
}
}
form=[[UITableView alloc]init];
form.frame = CGRectMake(0,64,700,704);
form.dataSource=self;
form.delegate=self;
form.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview:form];
[form reloadData];
}}
What is wrong guys?! Tell me, and I'll be forever in debt.
Thanks!
