0

在我的应用程序中,我通过互联网中的 php 文件从 DB 获取 git dat,数据显示在表格视图中,但我需要每分钟重新加载我的数据,我可以每分钟获取新数据,但我无法在表格视图中替换它。

1)你知道怎么做吗?

2)如果你知道如何让我的代码更简单,并删除那些不需要的代码?我会感谢你的。

我的 ViewController.m

#import "ViewController.h"
#import "CJSONDeserializer.h"

@implementation ViewController
@synthesize tblMain, rows;

NSURL *url;
NSString *jsonreturn;
NSData *jsonData;
NSError *error;
NSDictionary *dict;
UITableViewCell *cell;
static NSString *CellIdentifier;

- (void)viewDidLoad{
    [super viewDidLoad];

    [self GetData];
}

-(void)GetData{
    url = [NSURL URLWithString:@"http://ar2.co/savola/"];
    jsonreturn = [[NSString alloc] initWithContentsOfURL:url];
    NSLog(jsonreturn);
    jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding];
    dict = [[[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error] retain];
    rows = [dict objectForKey:@"savola"];
    NSLog(@"Array: %@",rows);
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [rows count];
}

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

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

    dict = [rows objectAtIndex: indexPath.row];

    cell.textLabel.text = [NSString stringWithFormat:@"%@ - %@", [dict objectForKey:@"company"], [dict objectForKey:@"price"]];
    cell.detailTextLabel.text = [dict objectForKey:@"time"];

    return cell;
}


@end
4

4 回答 4

1

要强制表重新加载其信息,请[self.tableView reloadData]从您的视图控制器类调用。这将再次调用所有数据源方法,并且还会更新显示。

于 2012-06-26T06:36:04.750 回答
1

从服务器获取新数据后,您应该重新加载表。就像在您的 GetData 方法中一样:

- (void)GetData
{
    url = [NSURL URLWithString:@"http://ar2.co/savola/"];
    jsonreturn = [[NSString alloc] initWithContentsOfURL:url];
    NSLog(jsonreturn);
    jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding];
    dict = [[[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error] retain];
    rows = [dict objectForKey:@"savola"];
    NSLog(@"Array: %@",rows);

   [yourTable reloadData];
}
于 2012-06-26T06:37:48.123 回答
1

您需要使用reloadData方法重新加载表格视图以显示新数据。

但正如你提到的 - “但我需要每分钟重新加载我的数据”

因此,为此,您可以使用现有数据检查收到的数据,如果新数据发生更改,则只需重新加载表,否则跳过。

如果您在不更改数据的情况下每分钟不必要地重新加载表,那将是不正确的,也会减慢您的应用程序的速度。

于 2012-06-26T06:41:54.553 回答
0

在这种情况下,我建议您使用NSFetchedResultsController。它只会在需要时自动更新您的表格。

于 2012-06-26T06:55:08.473 回答