Parse中的iOS API - 一对多关系

时间:2012-09-23 07:51:59

标签: iphone objective-c ios parse-platform

我正在使用parse作为我的iPhone应用程序的后端部分。

Relational Data中描述的Parse中我们可以有一对多的关系。

此代码可以很好地检索数据:

PFQuery *query = [PFQuery queryWithClassName:@"Comment"];
PFObject *fetchedComment = [query getObjectWithId:@"0PprArjYi3"];

NSString *content = [fetchedComment objectForKey:@"content"];
printf("%s", [content UTF8String]);

但是当我使用Link中提供的代码时,它会返回null:

PFObject *post = [fetchedComment objectForKey:@"parent"];
[post fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) {
          title = [post objectForKey:@"title"];
}];
printf("%s", [title UTF8String]);     // RETURN NULL

有人能告诉我这段代码有什么问题吗? 问题可能是提取评论


附加物

这个也有例外:

PFQuery *query = [PFQuery queryWithClassName:@"Comment"];
PFObject *fetchedComment = [query getObjectWithId:@"0PprArjYi3"];

PFObject *post = [fetchedComment objectForKey:@"parent"];
NSString *title = [post objectForKey:@"title"];
printf("%s", [title UTF8String]);

1 个答案:

答案 0 :(得分:0)

顾名思义,方法fetchIfNeededInBackgroundWithBlock是在后台执行的。您的代码要求获取,然后立即继续printf。在那个时间点,尚未提取数据,因此title可能仍为nil

您有两种选择 -

  1. 使用同步方法,例如[post fetch]:而不是[parent fetchInBackground ...]。

    [post fetch];
    title1 = [post objectForKey:@"title"];
    
  2. fetchInBackground...方法完成后,在块内打印标题。