0

我正在开发一个使用 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]);
        }
    }];
}];

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

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

代码的主要思想是一个接一个地保存东西。换句话说,imageFile 是PFFile先保存的,然后PFObject保存 userPhoto,最后保存已预填充的 userProfile 和新PFObject的作为它的一部分。此个人资料。

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

感谢您提前提供的帮助和时间。

4

1 回答 1

3

而不是嵌套有时对我有用的是 PFObject SaveAll 功能,您可以传入一个对象数组,这些对象按照它们在数组中出现的顺序保存,然后它们将全部保存,并且您仍然可以执行嵌套的代码块。都成功了。

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

}
于 2014-04-16T14:24:23.587 回答