gpt4 book ai didi

ios - 调用 [tableView reloadData] 时 TableView 未重新加载

转载 作者:行者123 更新时间:2023-11-28 21:38:39 24 4
gpt4 key购买 nike

当我从容器中的另一个 tableView 选择一行时,我试图让我的 tableView(初始 viewController)刷新。

选中该行后,它会从 Web 服务器解析一个 JSON 文件,将其保存并存储在 docs 目录中。主视图中的 tableView 应该使用新的 JSON 文件重新加载。

它应该是这样工作的:

enter image description here

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(部分被省略,因为它们没用)

- (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];
}}

有什么不对的人?!告诉我,我将永远欠债。

谢谢!

最佳答案

这可能是因为您在后台线程上呈现 View Controller 。尝试在主运行循环中展示它:

[self.jsonData writeToFile:appFile atomically:YES];
dispatch_async(dispatch_get_main_queue(), ^{
ViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];
[vc viewDidLoad];
});

关于ios - 调用 [tableView reloadData] 时 TableView 未重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32955539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com