2015-11-07 71 views
0

我是Objective-C的初学者,我无法弄清楚在我的应用程序中实现它。 我设法加载行(4列)从数组解析和显示在表视图。但我无法加载所有3k行。我知道1000的限制。请指导我如何在1000次读取后每次放置指针。从解析数组中的25k行加载并在表格视图中显示

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]); 

}

+0

你*永远不会*想下载25K对象。该应用程序应该只下载可以显示的对象,然后当用户滚动它时会执行增量下载以持续显示视图中的项目。你可以尝试批量大小,但我猜30个项目是一个很好的起点。 – Moonwalkr

回答

2

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

核心数据是一种选择。

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

问题是我无法管理下载所有的数据。我获取 前1000行,但我无法获取更多的行。我在for(PFQuery *)queryForTable中创建了for循环 ,但没有结果。请告诉我如何 实现它,所以我可以从解析超过1000行。 - 拉鲁

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

我会认为你应该开始一个查询,然后当那个完成时,开始另一个查询,其中前一个查询停止,直到你拥有所有需要的对象。

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

+0

问题是我无法管理下载所有的数据。我获取前1000行,但后来我无法获取更多行。我在 - (PFQuery *)queryForTable中创建了for循环,但没有任何结果。请告诉我如何实现它,以便从解析中获得1000多行。 – Lalu

0

我无法想象,为什么你想一次下载25K的对象,在表格视图中显示它。谁应该看这张巨大的桌子?
但是,如果你真的想从Parse下载25k个对象,你必须发出25个查询,每个对象1000个对象。第i个查询(从i = 0开始)必须受到query.skip = i*1000;的限制,请参阅here

+0

我想将25k分成更小的类,但其中一些将有2000行左右。不幸的是他们不能让他们变小。 – Lalu

+0

是的,但是在查询表中实现quere.skip?的位置? – Lalu

+0

我仍然无法设法读取超过1000行。我在 - (PFQuery *)queryForTable中实现了循环,但没有结果。请帮助我如何实施它,以便它的工作。 – Lalu

0

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

相关问题