Parse.com -как обновить информацию пользователя

когда я меняю, например, bool в бэкэнде синтаксического анализа, я не могу получить это значение в своем приложении iOS. См. следующий скриншот, где первый bool объекта пользователя был изменен вручную, а второй был изменен из приложения.

enter image description here

первый не работает, тогда как тот (который был изменен из приложения) работает. Я получаю значение со следующим фрагментом кода:

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

в первом случае возвращения объект всегда nil (где я изменил bool вручную).

3 ответов


после внесения изменений в таблицу синтаксического анализа пользователя, вызовите

[[PFUser currentUser] fetch]; //synchronous

или

[[PFUser currentUser] fetchInBackground]; //asynchronous

или

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

до

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

чтобы получить обновленную копию вашего


примеры Свифт:

прежде всего, пожалуйста, посмотрите на isDataAvailable и 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()

также, вероятно, лучше / эффективнее использовать fetchIfNeeded, fetchIfNeededInBackground или fetchIfNeededInBackgroundWithBlock: ", так как они будут использовать локальный кэш, когда доступен."

// 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         
})

в противном случае вы можете также использовать fetch, fetchInBackground, fetchInBackgroundWithBlock если вам не нужно использовать локальный кэш.

// 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
})

когда у вас есть указатели, вы не можете использовать fetch. это лучший способ:

 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) {
}];