从DB重新加载TableView数据

时间:2012-06-26 06:33:24

标签: iphone objective-c ios cocoa

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

1)你知道怎么做吗?

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

我的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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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];
}

答案 2 :(得分:1)

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

但正如你所说 - “但我需要每分钟重新加载一次数据”

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

如果您每隔一分钟重新加载一次不必要的数据而不更改数据,这将是不正确的,这也会降低您的应用。

答案 3 :(得分:0)

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