我正在尝试使用 Parse 后端的 Question 对象填充 PFQueryTableViewController。如何在此方法中实现块?
- (PFQuery *)queryForTable // I'm having issues with using the method "findObjectInBackgroundWithBlock" in this method.
{
PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
[query fromLocalDatastore];
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *parseQuestions, NSError *error) { // Fetch from local datastore
if (parseQuestions != nil) {
NSMutableArray *mutableParseQuestions = [parseQuestions mutableCopy];
self.questions = mutableParseQuestions; // if Set local array to fetched Parse questions
} else {
if ([InternetReachabilityManager isReachable]) {
[query findObjectsInBackgroundWithBlock:^(NSArray *parseQuestions, NSError *error) { // Fetch from Cloud
NSMutableArray *mutableParseQuestions = [parseQuestions mutableCopy];
self.questions = mutableParseQuestions; // if Set local array to fetched Parse questions
[Question pinAllInBackground:parseQuestions]; // Save query results to local datastore
}];
}
}
}];
return query;
}
这是因为 queryForTable 已经是后台进程了吗?我应该使用
[查询 findObjects]
另外,我正在尝试在我的 fetch 中实现可达性。
- 尝试从本地数据存储中获取
- 如果数据存在则将数据加载到表中,否则切换到网络
- 如果网络可用,则调用阻止
- 将网络获取的结果保存到本地数据存储中
我知道这个方法应该自动将它获取的对象分配给行,但是如果我们传递一个 PFObject 子类对象,我不知道如何使用它。这是我对数组的解释。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
self.question = [self.questions objectAtIndex:indexPath.row]; // Save one question from row
static NSString *identifier = @"QuestionsCell";
QuestionsCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[QuestionsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
[cell setQuestion:self.question]; //
return cell;
}
这就是我使用获取的数组来填充 tableView 的方式。
所以我的问题:
- 为什么我不能在 queryForTable 中调用块?
- 有什么方法可以通过使用 queryForTable 将对象自动分配给行来使这更简单吗?
- 如果无法访问互联网并且本地数据存储为空,我该怎么办?