我想从Parse.com中的5个类中获取对象数(以检查是否所有对象都已成功获取)。
因为我正在使用findObjectsInBackgroundWithBlock
:有时在我使用它之前并没有提取所有对象,这就是我想要检查的原因。
我该怎么做?
答案 0 :(得分:0)
更新2 :刚刚注意到您在询问iOS。它的原理基本相同,使用fetchAllIfNeeded如下: https://parse.com/docs/ios/api/Categories/PFObject(Synchronous).html#/c:objc(cs)PFObject(cm)fetchAllIfNeeded:
更新:比天真的更好的方式(下面)可能会使用fetchAllIfNeededInBackground:
ArrayList<ParseObject> objectsToFetch = new ArrayList<>();
objectsToFetch.add(object1);
objectsToFetch.add(object2);
objectsToFetch.add(object3);
ParseObject.fetchAllIfNeededInBackground(objectsToFetch, new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
//all are fetched, do stuff
}
});
我的本地方法是添加一个外部布尔数组,其中每个布尔值负责其中一个类。 当findObjectsInBackgroundWithBlock的'done'函数运行时,我将该boolean设置为“true”并运行一个函数来检查是否所有数组都为真,如果是 - >&gt;所有课程都已取得,我可以继续。
我的代码示例:
boolean[] itemFetched;
protected void getAllClassesAndDoStuffWithThem() {
itemFetched= new boolean[NUM_OF_CLASSES];
for (int i=0;i<NUM_OF_CLASSES;i++){
final int finalI = i;
itemFetched[i] = false;
parseObjectArray[i].fetchIfNeededInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject object, ParseException e) {
itemFetched[finalI] = true;
finishInitIfPossible();
}
});
}
}
private void finishInitIfPossible() {
for (int i=0;i<NUM_OF_CLASSES;i++){
if (!itemFetched[i])
return;
}
//all classes fetched
finishInit();
}
private void finishInit() {
//do stuff with all 5 classes
}