从View Did Load中检索的数据创建表视图控制器

时间:2015-08-30 05:16:27

标签: ios objective-c json uitableview viewdidload

您好我是创建表视图控制器的新手。我在尝试将通过ViewDidLoad部分中的Json检索到的数据加载到表视图控制器中时遇到了困难。 我注意到的第一件事是我最终放入我的json数据(dataArray)的数组在numberOfRowsInSection中不可用,所以我在viewDidLoad之外声明它,但现在看到当我调试数组时它到达numberOfRowsInSection是空的。我事先测试了检索代码,所以我确定它有效。 我有一些问题: 1.为什么dataArray在其他方法中是空的? 2.加载数据以便在ViewDidLoad中的tableviews中显示是否可以,或者我是否应该将这些数据加载到其他更可见且可供tableview方法使用的地方?

以下是代码:

NSArray *dataArray = nil;


- (void)viewDidLoad {
    [super viewDidLoad];

    dataArray = [[NSArray alloc] init];

    //  Set URL variable with Token
    NSString *token = @"99fdf505547d607e65b8b8ff16113337";
    NSString *teacherUrl = [NSString stringWithFormat: @"https://covle.com/apps/api/nextdoorteacher/teachers?t=%@",token];

    //  Set up the session configuration
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];

    [[session dataTaskWithURL:[NSURL URLWithString:teacherUrl]
            completionHandler:^(NSData *data,
                                NSURLResponse *response,
                                NSError *error) {
                NSLog(@"response ==> %@", response);

                if (!error) {
                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
                    if (httpResponse.statusCode == 200){

                        NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&error];

                        NSLog(@" heres the serialised json ===> %@", jsonData);
                        // move serialised JSON into Array (as the data contained is in array)

dataArray =(NSArray *)[jsonData copy];

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    // Return the number of rows in the section.
    return dataArray.count;
    NSLog(@"Array count is set to ===> %@", dataArray.count);

非常感谢任何帮助理解和解决这个问题。 感谢

1 个答案:

答案 0 :(得分:1)

为此 NSArray *dataArray=(NSArray*)[jsonData copy]; 您正在创建一个名为dataArray的新局部变量,它与您在viewDidLoad中分配的全局dataArray不同,所以只需编写 dataArray = (NSArray*)[jsonData copy];您将获得numberOfRowsInSection

中预期的数组计数

编辑: 在[self.tableview reloadData]之后调用dataArray = (NSArray*)[jsonData copy]来调用tableview委托方法再次触发!