StackMob& UITableView滞后

时间:2013-06-24 15:13:27

标签: iphone objective-c uitableview stackmob

我对UITableView和StackMob SDK上一版本有奇怪的行为。

我尝试在表格中显示用户列表。我的请求代码类似于StackMob的this tutorial

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"username" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

[self.managedObjectContext executeFetchRequest:fetchRequest onSuccess:^(NSArray *results) {
    [self.refreshControl endRefreshing];
    self.objects = results;
    [self.tableView reloadData];  
} onFailure:^(NSError *error) {
    [self.refreshControl endRefreshing];
    NSLog(@"An error %@, %@", error, [error userInfo]);
}];

然后在每次调用

之后
- (UITableViewCell *)tableView:cellForRowAtIndexPath:

SDK向服务器发送请求

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSManagedObject *object = [self.objects objectAtIndex:indexPath.row];
    cell.textLabel.text = [object valueForKey:@"username"];
    return cell;
}

我找到的其他链接:123

1 个答案:

答案 0 :(得分:0)

我认为缓慢的原因是每个新的单元格创建都必须等待与服务器的连接才能获取“用户名”。我认为最好的解决方案是更新到2.0 SDK(如果你还没有使用它)。并启用缓存,请参阅here了解详细信息。这样,初始提取将使用用户名对象填充缓存,并且每次调用cellForRowAtIndexPath中的NSManagedObject将不会导致网络请求。