UITableView没有加载但是数组已填充

时间:2012-06-21 20:54:08

标签: ios uitableview

我有一个UITableView,我想通过WebAPI填充数据。我已经设置了所有内容,我可以验证数据是以JSON格式返回的。我不明白为什么当我使用NSLog时,我看到我的阵列中的数据打印了几次,以及如何将这些数据分配给UITableView。我能够从viewDidLoad方法填充表,但这些是硬编码的值。我想用我从远程服务器调用返回的数据填充网格。我的didReceiveData委托中可以使用此数据。我在这里做错了什么?

我在MasterViewControler.h中有这段代码

@interface MasterViewController : UITableViewController <UITableViewDataSource, UIAlertViewDelegate> {

NSMutableArray *dataArray;
NSMutableArray *categoryNames;

}

这是我在MasterViewController.m文件中的精简版本

NSMutableData* receivedData;
NSString* hostName;
NSInteger portNumber = 9999;
NSMutableDictionary* dictionary;
NSInteger maxRetryCount = 5;
int count = 0;

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

NSLog(@"Succeeded! Received %d bytes of data",[data length]);
NSError *error = nil;
// Get the JSON data from the website

id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

if ([result isKindOfClass:[NSArray class]]) {

    for (NSArray *item in result)
        [dataArray addObject:item];

    NSLog(@"%@", dataArray);
}
else {
    NSDictionary *jsonDictionary = (NSDictionary *)result;

    for(NSDictionary *item in jsonDictionary)
        NSLog(@"Item: %@", item);
}}

- (void)viewDidLoad{
[super viewDidLoad];

hostName = [[NSString alloc] initWithString:@"12.34.56.78"];

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%i%@", hostName, portNumber, @"/api/products"]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url cachePolicy: NSURLRequestReloadIgnoringLocalCacheData timeoutInterval: 2]; 

NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];

// Do any additional setup after loading the view, typically from a nib.
self.navigationItem.leftBarButtonItem = self.editButtonItem;

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addNewItem)];  //insertNewObject
self.navigationItem.rightBarButtonItem = addButton;

dataArray = [[NSMutableArray alloc] init];
//[dataArray addObject:@"Apple"];
//[dataArray addObject:@"Mango"];
//[dataArray addObject:@"Orange"];}

我没有在这里填充dataArray,而是试图在didReceiveData委托中填充它。 dataArray将被分配,但几乎就像我必须重新加载UITableView才能看到值。我在didReceiveData的末尾尝试了这个但是我收到了一个错误。

2 个答案:

答案 0 :(得分:2)

首先确保您的UITableViewDataSourceUITableViewDelegate已设置。

填充数组后(在您的情况下,在-(void)connection:didReceiveData:的末尾),您可以调用[tableView reloadData]来刷新表格。

然后你将你的单元格设置为:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // If your array is an array of strings, change if applicable
    NSString *string = [dataArray objectAtIndex:indexPath.row];
    [cell.textLabel setText:string];

}

答案 1 :(得分:0)

您的类应该实现UITableView的UITableViewDataSource协议,然后将自己指定为dataSource。然后实现cellForRowAtIndexPath:,这是实际使用模型数组初始化单元格的地方。数据准备就绪后,在表视图上调用reloadData。