从数组中解析25k行并在表视图中显示

时间:2015-11-07 14:33:20

标签: ios objective-c uitableview parse-platform

我是objective-c的初学者,我无法想象这一点在我的应用中实现。 我设法从数组中解析加载行(有4列)并在表视图中显示。但我无法设法加载所有3k行。我知道1000限制。请指导我每次读完1000后如何放指针。

self.parseClassName = @"LocalitatiMari";

- (PFQuery *)queryForTable
{
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
    return query;  
}

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

    static NSString *simpleTableIdentifier = @"ROviDRGCell";

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

    // Configure the cell
    //PFFile *thumbnail = [object objectForKey:@"imageFile"];
    //PFImageView *thumbnailImageView = (PFImageView*)[cell viewWithTag:100];
    //thumbnailImageView.image = [UIImage imageNamed:@"placeholder.jpg"];
    //thumbnailImageView.file = thumbnail;
    //[thumbnailImageView loadInBackground];



    if (self.tableView.tag !=100 )
    {
        UILabel *nameLabel = (UILabel*) [cell viewWithTag:101];
        nameLabel.text = [object objectForKey:@"CodPostal"];

        UILabel *prepTimeLabel = (UILabel*) [cell viewWithTag:102];
        prepTimeLabel.text = [object objectForKey:@"Oras"];

        UILabel *codnumenou = (UILabel*) [cell viewWithTag:103];
        codnumenou.text = [object objectForKey:@"Judet"];

        UILabel *strada = (UILabel*) [cell viewWithTag:105];
        strada.text = [object objectForKey:@"Strada"];

            }
    else
    {
        PFObject *objects = [self.searchResults objectAtIndex:indexPath.row];

        UILabel *nameLabel = (UILabel*) [cell viewWithTag:101];
        nameLabel.text = [objects objectForKey:@"CodPostal"];

        UILabel *prepTimeLabel = (UILabel*) [cell viewWithTag:102];
        prepTimeLabel.text = [objects objectForKey:@"Oras"];

        UILabel *codnumenou = (UILabel*) [cell viewWithTag:103];
        codnumenou.text = [objects objectForKey:@"Judet"];

        UILabel *strada = (UILabel*) [cell viewWithTag:105];
        strada.text = [objects objectForKey:@"Strada"];


    }



    return cell;
}

- (void) objectsDidLoad:(NSError *)error
{
    [super objectsDidLoad:error];

    NSLog(@"error: %@", [error localizedDescription]);

}

3 个答案:

答案 0 :(得分:2)

您应该在下载数据后通过持久性机制存储数据,因此您不必将其全部保存在内存中。

核心数据是一种选择。

如果您将它们保存到核心数据中,那么您的所有其他问题都已经有了众所周知且使用良好的模式(例如,让NSFetchedResultsController在数据和表格视图之间架起桥梁。“

  

问题是我无法下载所有数据。我拿了   前1000行,但后来我无法获取更多行。我做了for循环   在 - (PFQuery *)queryForTable,但没有结果。请你告诉我如何   实现它,这样我就可以从解析中获得超过1000行。 - 拉鲁

从未使用过解析,我不知道。但是,看到它是一个网络API,并且它们确实有一个获取限制,我无法想象他们鼓励在for循环中同时爆破N个查询。

我认为你应该启动一个查询,然后当一个查询完成后,启动另一个查询,前一个查询停止,直到你拥有所需的所有对象。

有兴趣了解如何做到这一点有多困难,我进入了一个简单的谷歌搜索" parse.com query more than 1000"这导致一个页面充满了这个确切问题的答案,并迅速让我参加了一个名为" Paging through more than 10,000 results."的论坛讨论。哪里有一个例子可以验证我上面所说的内容。

答案 1 :(得分:0)

我无法想象您为什么要一次下载25k对象,以便在表格视图中显示它。谁应该看看这张巨大的桌子呢? 但是如果你真的想从Parse下载25k对象,你必须发出25个查询,每个1000个对象。第i个查询(以i = 0开头)必须由query.skip = i*1000;约束here

答案 2 :(得分:0)

你可以在一个循环中设置一个变量i,从零开始,每次增加1,并使用query.skip(i * 1000),但是这个循环也只能运行10000,因为你不能超过10000 10000行。除此之外,您必须将跳过设置为零,并为updatedAt添加约束并仅选择旧行。