1

我被这个问题困了好几个小时,还没有找到任何解决方案……

我有一个表格作为UIViewController. 加载视图时,会调用所有数据源方法tableview,但是当我从服务器接收数据并调用[someTable reloadData]时,不会调用任何数据源方法。我已经通过断点确认我的数组确实包含 100 个对象。代理和数据源也都绑定到File ownerIB 中。

可能缺少什么?请帮助我...谢谢:(

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由于未调用此方法,因此调用了数据源方法,并且表从视图中消失了。知道为什么它不能被调用吗?

注意:我已经确认在服务器响应后我的 count = 100。

4

4 回答 4

0

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

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

于 2013-07-11T09:06:06.320 回答
0
someTable = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];

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

于 2013-07-11T09:02:42.853 回答
0

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

于 2013-07-11T09:08:13.253 回答
0

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

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

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

于 2016-02-19T04:42:31.367 回答