1

从 JSON 更新我的网络数据时我遇到了很大的问题。所以我有从 JSON URL 解析的简单 TableView。当我按下按钮时 - 来自 JSON 的信息写入 tableviewCell 但我需要随时更新此信息。所以我有我的代码:

-(void)viewDidAppear:(BOOL)animated {

        [super viewDidAppear:animated];

        NSURL *url = [NSURL URLWithString:@"http://url.json"];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];

        connection = [NSURLConnection connectionWithRequest:request delegate:self];
        if (connection) {
            webdata = [[NSMutableData alloc]init];

            [mytableview reloadData];

        }

我写了这段代码,但我的信息没有更新,我做错了什么?我也试过 ViewDidAppear、viewWillAppear。但什么都没有。

添加了 cellForRow 方法。

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



    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(! cell)
    {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];
    }



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

3 回答 3

3

尝试使用基于块的 NSURLConnection。我猜你形成网络数据的方式是问题所在。

NSURL *url = [NSURL URLWithString:@"http://url.json"];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:urlRequest
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *urlResponse, NSData * webdata, NSError *reponseError) {

    NSArray *json = [NSJSONSerialization JSONObjectWithData: webdata
                                                    options:0
                                                      error:nil];
    for (NSDictionary *person in json) {
        //Are these numbers or strings
        NSString *art = person[@"artist"];
        NSString *song2 = person[@"start"];
        [array addObject:art];
        [array2 addObject:song2];
    }
    [mytableview reloadData];

}];

不建议保留两个数组来仅显示艺术家姓名和歌曲名称。数据格式良好。将这些数据保存在数组中。当tableView:cellForRowAtIndexPath:您需要显示数据时,使用索引获取人员并找到相应的姓名和歌曲名称。

于 2013-06-27T11:33:46.537 回答
1

用这个 -(void)connectionDidFinishLoading:(NSURLConnection *)connection NSURLConnection delgate method.

  connection.delgate=self;
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// write your parsing logic 
// reload your table here
[mytableview reloadData];

}
于 2013-06-27T11:11:58.970 回答
0

从中获取数据JSON是一个异步过程。因此,NSNotification当您将对象放置到 array时,您需要按照该行放置一个 in 。并创建一个自定义函数,当reloadtable的.NSNotificationCentrearray has all the data from JSON

如果您需要任何进一步的帮助,请告诉我。

编辑:

    -your JSON block{

[[NSNotificationCenter defaultCenter]postNotificationName:@"newList" object:nil];
}

- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(reloadData) name:@"Doreload" object:nil];
}

-(void)reloadData               // Method to reload data and show data in table view
{
    [self.table reloadData];
}
于 2013-06-27T13:04:11.920 回答