为什么我的UITableViewController不在这里填充?

时间:2011-09-19 21:18:40

标签: iphone ios uitableview asihttprequest

当我的视图控制器出现在这里时,只是试图理解我的表格没有被填充。我正在使用AIHTTPRequest与REST API进行通信。该调用返回一个关联数组数组(我假设我必须转换为NSDurray的NSArray)。

在我的TableViewController的标题中:

@interface MyTableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
    NSArray *homepageItems;
}

@property (nonatomic, retain) NSArray * homepageItems;

在实施中:

@synthesize homepageItems;
....
- (void)viewDidLoad {

NSURL *url = [NSURL URLWithString:URL_TO_MY_API];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];

返回数据时:

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text data
    NSString *responseString = [request responseString];
    id response = [responseString objectFromJSONString];
    homepageItems = (NSArray *)response;
}

在Table View方法中:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
    }

    NSDictionary *dataItem = [homepageItems objectAtIndex:indexPath.row];

    // Configure the cell...
    cell.textLabel.text = [dataItem objectForKey:@"message"];

    return cell;
}

当视图加载时,表格中没有任何内容。我怀疑这种情况正在发生,因为当表视图方法被触发时,homepageItems还没有被异步方法填充。如何实现加载到表视图中的数据?

谢谢,

编辑:在我的requestFinished方法中,我通过执行以下操作检查了homepageItems对象:

for(NSDictionary *dictionary in homepageMMDs) {
    NSLog(@"%@", [dictionary objectForKey:@"message"]);
}

正在记录来自我的API服务的正确消息。

5 个答案:

答案 0 :(得分:2)

尝试重新加载数据!

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text data
    NSString *responseString = [request responseString];
    id response = [responseString objectFromJSONString];

    //Use self. to properly retain and you do not need to cast id assignments
    self.homepageItems = response; 

    //Make sure you reload the data!!
    [self.tableView reloadData];
}

答案 1 :(得分:2)

您需要保留homepageItems

 self.homepageItems = (NSArray *)response;

并且还按照乔说的重新加载了tableview

答案 2 :(得分:1)

您没有保留下载的数据:

而不是:

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text data.
    NSString *responseString = [request responseString];
    id response = [responseString objectFromJSONString];
    homepageItems = (NSArray *)response;
}

你需要这样做:(关键是在self前使用homepageItems

- (void)requestFinished:(ASIHTTPRequest *)request
{
    // Use when fetching text data.
    NSString *responseString = [request responseString];
    id response = [responseString objectFromJSONString];
    self.homepageItems = (NSArray *)response; 
    // and others have said you need to reload the tableView
    [self.tableView reloadData];
}

答案 3 :(得分:0)

您可以使用此cocoapod https://github.com/xmartlabs/XLData来从API端点获取数据并填充UITableView / UICollectionView。

答案 4 :(得分:-1)

我建议你创建一个显示你的API字符串的php页面,然后你可以解析元素并将它们导入到你想要的任何地方,它更容易!与你的代码相关我认为你需要解析元素,就像你一样可以在这里:http://www.ibm.com/developerworks/library/x-ioschat/。 幸运的。