0

我有个问题。我从我的 URL 获取 JSON,它看起来像这样:

- (NSMutableArray *)parseObject:(NSString *)object withKey:(NSInteger)key {
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *randomKey = [standardUserDefaults stringForKey:@"randomKey"];

NSString *urlString = [NSString stringWithFormat:@"http://domain.com"];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
NSError *error;
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

NSArray* latestLoans = [json objectForKey:@"object"];
NSDictionary* loan = [latestLoans objectAtIndex:key];

NSArray *myWords = [[loan objectForKey:object] componentsSeparatedByString:@","];

return myWords;
}

到我的 TableView

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

static NSString *CellIdentifier = @"Cell";

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

cell.textLabel.text = [[self parseObject:@"bedrijfsnaam" withKey:0] objectAtIndex:indexPath.row];
//cell.detailTextLabel.text = [[self parseObject:@"leverunix" withKey:0] objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:14.0];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 3;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}

它加载非常缓慢,当我想滚动时我有一种滞后。我能做些什么来让这变得更好?

谢谢

4

3 回答 3

3

每次调用时,您似乎都从服务器获取 JSON 数据cellForRowAtIndexPath。那一定很慢!

您应该只获取一次数据(例如 in viewDidLoad),反序列化 JSON 并将结果存储在视图控制器的某个属性中,以便cellForRowAtIndexPath可以从那里获取对象。

于 2013-08-06T14:16:11.670 回答
2

您的来电

NSData *data = [NSData dataWithContentsOfURL:url]; 

导致主线程在从 Web URL 检索数据时阻塞。

尝试使用异步方法。它将解决问题。

于 2013-08-06T14:21:15.860 回答
0

你在打电话

 - (NSMutableArray *)parseObject:(NSString *)object withKey:(NSInteger)key

一次又一次地在 cellForRowAtIndexPath 中。

这不应该发生。

尝试将数据保存在 viewDidLoad 或 viewWillAppear 中,然后将该数据保存在全局变量中。

现在调用将从该变量中获取数据并返回所需值的任何函数。

于 2013-08-06T14:18:58.473 回答