Parse.com -как обновить информацию пользователя
когда я меняю, например, bool в бэкэнде синтаксического анализа, я не могу получить это значение в своем приложении iOS. См. следующий скриншот, где первый bool объекта пользователя был изменен вручную, а второй был изменен из приложения.
первый не работает, тогда как тот (который был изменен из приложения) работает. Я получаю значение со следующим фрагментом кода:
[[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) {
}];