我正在创建一个数组。该数组是来自网站的数据。我必须从中剥离一些东西并进行处理(基本上是公司信息,我将其简化为每个州之一)。

allStatesFinalArray是我要在表格视图中显示的数组。我可以在fetchedData语句中很好地记录它。但是无法将其放入表视图中。我从表视图日志中得到几个空响应。为什么?我知道我缺少什么。请帮忙。

//
//  StateTableViewController.m
//

#define kBgQueue            dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1
#define kLatestKivaLoansURL [NSURL URLWithString:@"http://www.sensored.com"] //2

#import "StateTableViewController.h"
#import "ResViewController.h"

@interface StateTableViewController()
@end


@implementation StateTableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    dispatch_async(kBgQueue, ^{
        NSData *data = [NSData dataWithContentsOfURL:kLatestKivaLoansURL];
        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
    });

}

////new code???
NSArray *allStatesFinalArray;

- (NSArray *)fetchedData:(NSData *)responseData
{
    //parse out the json data
    NSError *error;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

    NSArray *getCompaniesArray = [json objectForKey:@"CompaniesCD"]; //2  get all company info
    NSArray *getStatesArray = [getCompaniesArray valueForKey:@"state"];//get only states
    NSSet *getOneStateSet = [NSSet setWithArray:getStatesArray];//get rid of duplicates
    NSArray* allStatesFinalArray= [getOneStateSet allObjects];//nsset to array

    NSLog(@"allstatesfinalarray log 1  : %@", allStatesFinalArray);//return allStatesFinalArray;

    return allStatesFinalArray;// return an array of just one state

}
////end newcode???


#pragma mark - Table view data source

- (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 0;

    NSLog(@"allstatesfinalarray log 2  : %@", allStatesFinalArray);//return allStatesFinalArray;

    return [allStatesFinalArray count];
}
////NOTE ABOVE LOG RETURNS CORRECTLY!!!!

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //get log after this step   of the array
    NSLog(@"here is the list going to tableview: %@", allStatesFinalArray);

    static NSString *CellIdentifier = @"stateCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.textLabel.text = [allStatesFinalArray objectAtIndex:indexPath.row];

    return cell;
}
//////NOTE ABOVE LOG RETURNS SEVERAL NILLS????????

- (IBAction)done:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

@end

最佳答案

您的代码是一团混乱。您有两种方法之间声明的变量:

////new code???
NSArray* allStatesFinalArray;


这使它成为应用程序的全局变量,这很不好。

您有2个变量称为allStatesFinalArray;全局应用程序,应该是实例变量,而fetchData内部的局部变量根本不应该存在。

将该变量声明移至视图控制器类的标题:

@interface StateTableViewController()
{
  NSArray* allStatesFinalArray;
}
@end


这使其成为实例变量。

现在将fetchData方法更改为不返回结果:

- (void)fetchedData:(NSData *)responseData


同样,摆脱allStatesFinalArray中局部变量fetchData的修饰。使fetchData方法将其结果保存到allStatesFinalArray实例变量中。

现在,作为fetchData方法的最后一行,调用表视图的reloadData方法。

关于ios - 用数组填充UITableView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32416931/

10-10 20:49