如何使用swift从解析类查询/检索随机对象?

时间:2015-03-26 19:38:19

标签: ios swift object random parse-platform

我看了一遍,没有找到快乐。我想知道是否有人可以帮我弄清楚如何使用swift在iOS应用程序中从parse.com上的类中检索随机对象。我决不会要求别人写我的代码,因为那时我会学到什么,但我想知道是否有人可以提供一个通用的例子,我可以适应我的项目和未来的项目。

让我们说这个类叫做ParseClass,我需要用解析中的对象数据填充三个变量.A,B,C - 两个用字符串,一个用作字符串数组。让我们说在解析类中有... idk ... 50个对象,我需要随机一次检索它们。

逻辑上,我明白了...我需要对parseclass中的对象进行计数,然后从该计数中获取一个随机数,然后使用该数字以某种方式检索对象(直接从解析中使用a跳过随机查询限制1,或者通过将所有对象放入一个数组(最好/最有效的代码)。我只是不知道如何在swift中格式化/编写代码。任何人都认为他们可以帮助我(以及许多其他人显然)使用一些通用代码我可以适应我的特定项目吗?

这是一些通用代码......我可以启动它 - 我对它应该是什么有一个基本的想法,我只是不能很快地知道完成块。

var A  : String!
var B  : [String]!
var C  : String!

    var query : PFQuery = PFQuery(className: "ParseClass")
    query.findObjectsInBackgroundWithBlock {
        (objects : [AnyObject]!, error : NSError!) -> Void in

//现在怎样? 我在这里的其他问题中已经看过这个问题,但我不知道如何加入它。

let randomSkip = arc4random_uniform(count)

query.skip = randomSkip, and query.limit = 1.

对此的任何帮助将不胜感激。

哦 - 只是在另一个线程中看到了它...它基本上做了我需要的东西,但是在目标C中它看起来只有2个变量......有人可以帮助我在swift中重写吗?很抱歉这么啰嗦......新手的负担。我保证随着我越来越熟练,我会以最同情的方式帮助其他新手。 :-)

    - (void)randomQuestion:(void (^)(NSString *question, NSArray *answers))completion {
PFQuery *countQuery = [PFQuery queryWithClassName:@"ParseClass"];
[countQuery countObjectsInBackgroundWithBlock:^(int count, NSError *error) {
    NSInteger randomSkip = arc4random_uniform(count);
    PFQuery *query = [PFQuery queryWithClassName:@"ParseClass"];
    query.skip = randomSkip;
    query.limit = 1;
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            if (objects.count) {
                PFObject *ParseClassObject = objects[0];
                NSString *A = ParseClassObject[@"A"];
                NSArray *B = ParseClassObject[@"B"];
                completion(A, B);
            } else {
                NSLog(@"no error, but no ParseClass objects found");
            }
        } else {
            NSLog(@"there was an error %@", error);
            completion(nil, nil);
        }
    }];
}];

}

2 个答案:

答案 0 :(得分:1)

ObjectHolder应为objectHolderobjects,因为它是参数名称。

count的{​​{1}}为arc4random_uniform

如果您需要显示所有对象,那么下载对象并在本地随机访问它们将是最有效的。多次下载并不是很好。

由于下载行数有限,您最终会遇到大小限制。也许您可以下载页面并将每个页面中的项目视为一个单独的集合来随机查看...

因此,您不会使用objects.countskip,您只需访问limit数组中的元素。

在您使用它们之后从阵列中删除这些项目是最简单的。或者您可以随机对数组进行排序,这样您就不需要删除

答案 1 :(得分:0)

你能做到的一种方法是设置另一个叫做例如questionsNumber和每个问题将在那个问题中排成行。然后查询arc4random_uniform(count)中的数字,如下所示:

var query = PFQuery(className: "ParseClass")
        let randomNumber = arc4random_uniform(count)
        var randomNumberCast = Int(randomNumber)
        query.whereKey("questionNumber", equalTo: randomNumberCast)
        query.getFirstObjectInBackgroundWithBlock { (object: PFObject!, error: NSError!) -> Void in
            if error == nil {
                let questions = object["questions"] as String //This will equal your question at random.

        }

}