在IOS中未在reloadData上调用UITableView数据源方法

时间:2013-07-11 08:59:52

标签: ios datasource tableview reload

我被困在这个问题上好几个小时,并且没有找到任何解决方案......

我在UIViewController中有一张表作为子视图。当视图加载时,将为tableview调用所有数据源方法,但是当我从服务器接收数据并调用[someTable reloadData]时,不会调用任何数据源方法。我已通过断点确认我的数组包含100个对象。委托和数据源都绑定到IB中的File owner

可能会遗漏什么?请帮帮我...谢谢:(

OutLogController.h

@interface OutLogController : UIViewController<UITableViewDataSource,UITableViewDelegate,ASIHTTPRequestDelegate>
{
    NSMutableArray *outstandingKeys;

}
@property (strong, nonatomic) IBOutlet UITableView *someTable;

@end

OutLogController.m

@interface OutLogController ()

@end

@implementation OutLogController

@synthesize someTable;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    outstandingKeys = [[NSMutableArray alloc] init];
    someTable = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
    someTable.rowHeight = 85;
    [self retrieveOutstandingLogFromServer];
}


- (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 outstandingKeys.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil)
    {
          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    }

    // Configure the cell...
    LogUnit *unit = [outstandingKeys objectAtIndex:indexPath.row];

     cell.textLabel.text = unit.symbol;

    return cell;
}

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 85;
}

-(void) requestFinished:(ASIHTTPRequest *)request
{
    NSLog(@"%@",request.responseString);
    NSArray *list = [request.responseString JSONValue];//contains 100 objects

    for (int i = 0; i < list.count; i++) {

        NSArray *singleTrade = [[list objectAtIndex:i] JSONValue];

        LogUnit *unit = [[LogUnit alloc] init];

        unit.symbol = [singleTrade objectAtIndex:0];
        unit.type = [singleTrade objectAtIndex:1];
        unit.price = [singleTrade objectAtIndex:2];
        unit.remaining = [singleTrade objectAtIndex:3];
        unit.order = [singleTrade objectAtIndex:4];
        unit.time = [singleTrade objectAtIndex:5];

        [outstandingKeys addObject:unit];

    }

    if(outstandingKeys.count > 0)
    {
        [someTable reloadData];//does reload table

    }

}

修改

删除行后:

someTable = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
除了cellForRowAtIndexPath之外,

数据源方法被调用,并且表格从视图中消失,因为此方法未被调用。知道为什么它不能被调用吗?

注意:我已确认服务器响应后我的计数= 100。

4 个答案:

答案 0 :(得分:0)

someTable = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];

您已经从nib / storyboard绑定了UITableView。在这种情况下,您不必再次分配tableview。删除此行将完成工作

答案 1 :(得分:0)

someTable = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];

您创建新的tableView,它不会添加到当前视图。

答案 2 :(得分:0)

检查您的outstandingKeys计数可能为零计数

答案 3 :(得分:0)

尝试通过在主线程上执行来重新加载数据..

dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableRating reloadData];
    });

这将解决您的问题。快乐的编码..