我是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]);
}
答案 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添加约束并仅选择旧行。