Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Parse.com:使用查询获取数组列(关系)_Ios_Parse Platform_Pfquery - Fatal编程技术网

Ios Parse.com:使用查询获取数组列(关系)

Ios Parse.com:使用查询获取数组列(关系),ios,parse-platform,pfquery,Ios,Parse Platform,Pfquery,我有一个PFQueryTableViewController子类,它向Parse.com表查询名为messages的列的数据,该列属于数组类型 查询返回数据,但消息为空数组的情况除外(尽管表和消息字段中有数据) 下面是我为解析数据创建的查询: - (PFQuery *)queryForTable { PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; [query whereKey:@"user"

我有一个
PFQueryTableViewController
子类,它向Parse.com表查询名为
messages
的列的数据,该列属于数组类型

查询返回数据,但消息为空数组的情况除外(尽管表和
消息
字段中有数据)

下面是我为解析数据创建的查询:

- (PFQuery *)queryForTable {
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
    [query whereKey:@"user" equalTo:[PFUser currentUser]];
    [query includeKey:@"messages"];
    return query;
}
奇怪的是,一旦我更新了Parse对象并保存它,重新加载表数据就会获取数组列的数据

知道它为什么在初始查询中返回空数组吗

编辑:

查询结果的NSLog()输出(来自
-(void)objectsDidLoad:
):


上面的parseObject类就是我要查询的。

保存消息的方式非常耗时。因为您还没有等待“newMessage”被保存。所以它的ID值可能为空

通过将下一个代码放入完成块中,确保首先保存newMessage对象

Message *newMessage = [[Message alloc] init];
[newMessage saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if(succeeded){
        if (!self.parseObject.objectId) {
            self.parseObject = [[MyParseObject alloc] init];
            [self.parseObject setUser:[User currentUser]];
        }

        [[self.parseObject messages] addObject:newMessage];
        [self.parseObject saveInBackground];
    }
}]; 

如果看不到Message和MyParseObject类的定义,我就不会有多大帮助了

如果你发布更多的代码,这会有所帮助。什么代码创建了关系?什么代码保存它?如何调用
queryForTable
,以便确保保存已完成?@piojo,请参阅更新。另外,
queryForTable
由控制器自动调用。是否在save函数之后立即调用您的查询函数?如果是这样,数据可能还没有保存。或者部分保存,保存的是用户对象,而不是
newMessage
。但我能想到的还有其他一些事情可能会出错,但我只是对发生的事情知之甚少。此外,如果我们陷入了一些棘手的问题,比如哪些对象需要按什么顺序创建(以及什么时候需要保存才能使用),这对我来说是站不住脚的。
parseObject
对象与
newMessage
对象的指针一起保存。只是查询并没有返回其余的数据,它是一个数组类型的列。我在“关系”部分的文档中遵循了这个示例(关系使用数组部分)。
Message *newMessage = [[Message alloc] init];
//... set message properties
[newMessage saveInBackground];

if (!self.parseObject.objectId) {
    self.parseObject = [[MyParseObject alloc] init];
    [self.parseObject setUser:[User currentUser]];
}

[[self.parseObject messages] addObject:newMessage];
[self.parseObject saveInBackground];
Message *newMessage = [[Message alloc] init];
[newMessage saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if(succeeded){
        if (!self.parseObject.objectId) {
            self.parseObject = [[MyParseObject alloc] init];
            [self.parseObject setUser:[User currentUser]];
        }

        [[self.parseObject messages] addObject:newMessage];
        [self.parseObject saveInBackground];
    }
}];