【发布时间】:2014-07-30 09:53:36
【问题描述】:
我有一个解析数据库,其中包含一个名为 MeetingObject 的类,其中填充了 6000 个对象(顺便说一下,它会增长...)。
作为解析查询限制 1000,我正在尝试使用跳过查询属性来获取它们。
以下代码给了我 2000 个对象:
NSMutableArray *allObjects = [NSMutableArray array];
NSUInteger limit = 1000;
__block NSUInteger skip = 0;
[query setLimit: limit];
[query setSkip: skip];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
[allObjects addObjectsFromArray:objects];
NSLog(@"%lu", (unsigned long)allObjects.count );
if (objects.count == limit) {
// There might be more objects in the table. Update the skip value and execute the query again.
skip += limit;
[query setSkip: skip];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
[allObjects addObjectsFromArray:objects];
NSLog(@"%lu", (unsigned long)allObjects.count );
}];
}
} else if (error || [error code] == kPFErrorConnectionFailed) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error!" message:NSLocalizedString(@"The Internet connection appears to be offline.",@"no internet") delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
self.navigationItem.rightBarButtonItem.enabled = YES;
self.tableView.userInteractionEnabled = YES;
[alertView show];
return;
}
}];
我的理解是,如果我想再获得 1000 个对象,我必须添加另一个嵌套查询,然后再添加一个用于下一个 1000 的对象,依此类推:
// finding the first 1000 objects
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
[allObjects addObjectsFromArray:objects];
NSLog(@"%lu", (unsigned long)allObjects.count );
if (objects.count == limit) {
// finding another 1000 objects
skip += limit;
[query setSkip: skip];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
[allObjects addObjectsFromArray:objects];
NSLog(@"%lu", (unsigned long)allObjects.count );
if (objects.count == limit) {
// finding another 1000 objects
skip += limit;
[query setSkip: skip];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
[allObjects addObjectsFromArray:objects];
NSLog(@"%lu", (unsigned long)allObjects.count );
}];
}
}];
}
但是如果我不知道对象的确切数量怎么办?我尝试使用:
while (objects.count == limit) {
// There might be more objects in the table. Update the skip value and execute the query again.
skip += limit;
[query setSkip: skip];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
[allObjects addObjectsFromArray:objects];
NSLog(@"%lu", (unsigned long)allObjects.count );
}];
}
但我明白了
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“此查询具有未完成的网络连接。你必须等到它完成。'
因为当然查询是在最后一个完成之前进行的......
【问题讨论】:
标签: ios7 xcode5 parse-platform