【问题标题】:How to query for objects that are not already in an array (refreshing for an array) using parse.com service?如何使用 parse.com 服务查询尚未在数组中的对象(刷新数组)?
【发布时间】:2013-06-27 19:48:21
【问题描述】:

我有一个表格视图,其中填充了一个包含字符串的数组。该数组从 parse.com 上的云数据库接收数据。它在一开始就成功填充。我的视图控制器底部有一个刷新按钮,它应该添加数据库中尚未在数组中的所有新对象。我试图通过将whereKey:notContainedIn: 发送到查询对象来做到这一点。但它不会获取任何新对象。这是我的刷新方法代码。我究竟做错了什么?

-(void) refresh {
    PFQuery *query = [PFQuery queryWithClassName:@"Employee"];
    [query whereKey:@"Employee" notContainedIn:currentEmployees]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            // The find succeeded.
            NSLog(@"Successfully retrieved %d scores.", objects.count);
            // Do something with the found objects
            for (PFObject *object in objects) {
                NSLog(@"%@", object.objectId);
                [employees addObject:object];
                dispatch_async(dispatch_get_main_queue(), ^ {
                    [hvc.tableView reloadData];
                });
            }
        } else {
            // Log details of the failure
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];

edit:它现在正在获取对象,但它正在获取数据库中已经存在的所有内容并再次添加它们。所以,如果我有一个

的列表
- dog 
- cat 

我在线将鸟添加到数据库中,我会得到:

- dog 
- cat 
- dog 
- cat 
- bird

我该如何解决这个问题?

【问题讨论】:

    标签: ios objective-c parse-platform querying


    【解决方案1】:

    当您使用whereKey:notContainedIn: 时,key 应该是您的Employee 上的一个字段。如果您遵循命名约定,那么您实际提供的是对象名称本身。看起来你提供了一个对象数组。你应该有一个identity 字段(或类似的东西),并且你应该向whereKey:notContainedIn: 提供一个身份数组。您可以通过以下方式获取身份数组:

    NSArray *identities = [currentEmployees valueForKey:@"identity"];
    

    (用适当的文件名代替identity

    【讨论】:

    • 是的,我刚刚注意到这一点。所以我必须做一个数组,用所有员工的名字填充它,然后使用它?我觉得那是低效的。有没有更简单的方法来更新数组,或者这就是这样做的方式?
    • 我展示的代码将从您已有的数组中为您获取员工的姓名(如果您将identity 更改为name
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多