如何在课堂上获得Parse.com对象计数

时间:2016-01-23 11:43:20

标签: ios objective-c iphone cocoa-touch parse-platform

我想从Parse.com中的5个类中获取对象数(以检查是否所有对象都已成功获取)。

因为我正在使用findObjectsInBackgroundWithBlock:有时在我使用它之前并没有提取所有对象,这就是我想要检查的原因。

我该怎么做?

1 个答案:

答案 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
}