我有一个表视图,其中填充了一个包含字符串的数组。此数组从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
然后我在线将bird添加到数据库中,我会得到:
- dog
- cat
- dog
- cat
- bird
我该怎么解决这个问题?
使用whereKey:notContainedIn:
时,key
应该是Employee
上的字段。如果您遵循命名约定,那么实际提供的是对象名称本身。看起来你提供了一个对象数组。您应该有一个identity
字段(或类似的字段),并且应该为whereKey:notContainedIn:
提供一个标识数组。您可以通过以下方式获得身份数组:
NSArray *identities = [currentEmployees valueForKey:@"identity"];
(用适当的文件名代替identity
)