Parse.com - How to refresh the User's information

后端 未结 3 2076
不知归路
不知归路 2021-02-06 07:18

When I\'m changing for example a bool in the Parse backend I can not retrieve this value in my iOS app. Please see the following screenshot where the first bool of the user obje

相关标签:
3条回答
  • 2021-02-06 07:48

    When you have pointers you can not use fetch. this is the best way:

     PFQuery *userQuery = [PFUser query];
        [userQuery includeKey:@"addresses"];
        [userQuery includeKey:@"cards"];
        [userQuery whereKey:@"objectId" equalTo:[PFUser currentUser].objectId];
        [userQuery getFirstObjectInBackgroundWithBlock:^(PFObject * _Nullable object, NSError * _Nullable error) {
    }];
    
    0 讨论(0)
  • 2021-02-06 07:53

    Examples in Swift:

    First and foremost, please have a look at isDataAvailable and isDirty.

    var user = PFUser.currentUser()!
    
    // Gets whether the PFObject has been fetched.
    // isDataAvailable: true if the PFObject is new or has been fetched or refreshed, otherwise false.
    user.isDataAvailable()
    
    // Gets whether any key-value pair in this object (or its children) has been added/updated/removed and not saved yet. 
    // Returns whether this object has been altered and not saved yet.
    user.isDirty()
    

    Also it is probably better/more efficient to use fetchIfNeeded, fetchIfNeededInBackground, or fetchIfNeededInBackgroundWithBlock: "since they will use the local cache when available."

    // Synchronously fetches the PFObject data from the server if isDataAvailable is false.
    user.fetchIfNeeded()
    
    // Fetches the PFObject data asynchronously if isDataAvailable is false, then sets it as a result for the task.    
    user.fetchIfNeededInBackground()
    
    // Fetches the PFObject data asynchronously if isDataAvailable is false, then calls the callback block.        
    user.fetchIfNeededInBackgroundWithBlock({ 
                (object: PFObject?, error: NSError?) -> Void in
        // Code here         
    })
    

    Otherwise you can also use fetch, fetchInBackground, fetchInBackgroundWithBlock if you do not need to use the local cache.

    // Synchronously fetches the PFObject with the current data from the server.
    user.fetch()
                
    // Fetches the PFObject asynchronously and sets it as a result for the task.
    user.fetchInBackground()
                
    // Fetches the PFObject asynchronously and executes the given callback block.
    user.fetchInBackgroundWithBlock({
                   (object: PFObject?, error: NSError?) -> Void in
         // Code here
    })
    
    0 讨论(0)
  • 2021-02-06 08:11

    After you've made changes to your user's Parse table, call

    [[PFUser currentUser] fetch]; //synchronous
    

    or

    [[PFUser currentUser] fetchInBackground]; //asynchronous
    

    or

    [[PFUser currentUser] fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { //asynchronous with completion block
    

    before

    [[PFUser currentUser] objectForKey:@"is_pro"]
    

    to get an updated copy of your [PFUser currentUser] object.

    Note: refresh and refreshInBackgroundWithBlock: are now deprecated and have been replaced with fetch and fetchInBackgroundWithBlock:

    Update:

    As Ryan Kreager pointed out in the comments, it's probably better/more efficient to use fetchIfNeeded, fetchIfNeededInBackground, or fetchIfNeededInBackgroundWithBlock: "since they will use the local cache when available."

    0 讨论(0)
提交回复
热议问题