在我的应用程序中我通过互联网上的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
答案 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。只有在需要时它才会自动更新您的表。