在iOS中解析嵌套的saveInBackgroundWithBlock

时间:2013-11-08 03:17:04

标签: ios parsing parse-platform

我正在开发一个使用Parse作为服务器后端的iOS项目。作为我的代码的一部分,我有以下saveInBackgroundWithBlock嵌套块。

// Save PFFile
[imageFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    ...
    [userPhoto saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {        
        if (!error) {
            self.profileDictionary[@"picture"] = userPhoto;

            NSLog(@"%@", self.profileDictionary);

            NSMutableDictionary *userProfile = self.profileDictionary;

            [[PFUser currentUser] setObject:userProfile forKey:@"profile"];
            [[PFUser currentUser] saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
                if (!error) {
                    NSLog(@"Saving User Profile Succeded\n\n\n\n");
                    // If user's info is saved, then let's just segue to the actual app
                    [self performSegueWithIdentifier:@"profileToMain" sender:self];
                } else {
                    // Log details of the failure
                    NSLog(@"Error while saving profile: %@ %@", error, [error userInfo]);
                }
            }];
        } else {
            // Log details of the failure
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];
}];

如您所见,代码主要是嵌套在一起的3个saveInBackgroundWithBlock:块。

一切正常,直到第三个区块,它只是挂起。我知道这是因为没有执行segue。

代码的主要思想是一个接一个地保存。换句话说,imageFile是先保存的PFFile,然后保存userPhoto PFObject,最后预先填充的userProfile会与新{{1}一起保存作为其中的一部分。这个档案。

有关为什么会挂起的任何评论?如何在不导致挂起的情况下实现将对象保存到Parse的连续性?

我事先感谢你的帮助和时间。

1 个答案:

答案 0 :(得分:3)

有时对我来说有效的嵌套是PFObject SaveAll功能,你可以传入一个对象数组,按照它们在数组中出现的顺序保存,然后它们都会保存,你仍然可以执行嵌套的块代码一旦它们都成功了。

[PFObject saveAllInBackground:@[Object1, Object2] block:^(BOOL succeeded, NSError *error) {
     if(succeeded){
           //Your code to execute once finished
     }

}