0

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

我们可以在 Parse 中建立一对多关系,如Relational Data中所述。

此代码可以正常检索数据:

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

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

但是当我使用他们在链接中提供的代码时,它返回 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]);
4

1 回答 1

0

fetchIfNeededInBackgroundWithBlock顾名思义,该方法是在后台执行的。您的代码要求获取,然后立即继续到printf. 在那个时间点,数据还没有被提取,所以title可能仍然是nil.

你有两个选择——

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

    [post fetch];
    title1 = [post objectForKey:@"title"];
    
  2. fetchInBackground...打印方法完成时执行的块内的标题。

于 2012-09-23T09:16:39.797 回答