Parse Unpin не удаляет объект из локального хранилища данных
Это должно работать.
Вот одна из многих попыток получить эту информацию
myTrainingSessions[indexPath.row].unpinInBackgroundWithBlock{ (succ, e) -> Void in
if succ == true {
// just remove from table view etc
self.myTrainingSessions[indexPath.row].deleteEventually()
self.myTrainingSessions.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
// Shows that my object is still in datastore!
// object should be UNPINNED - but appers in this result....
var query = PFQuery(className:TrainingSession.parseClassName())
query.whereKey(self.userType(), equalTo: PFUser.currentUser())
query.orderByDescending("createdAt")
query.fromLocalDatastore().ignoreACLs()
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if error != nil { return }
if let result = objects as? [TrainingSession] {
println("local results")
println(result)
}
}
}
}
Я делаю запрос после открепления, и объект все еще существует.
Ответы
Ответ 1
Я связался с командой поддержки о проблеме, в которой вы не можете отменить объект, на котором есть ссылочный объект, поэтому я передаю поток заинтересованным:
https://developers.facebook.com/bugs/138298746504630/
Помощник сказал, что это By Design, но по моей просьбе улучшить эту спецификацию он сказал мне, что расскажет команде об этом.
Ответ 2
Одна из причин, почему это не работает для вас, состоит в том, что в вашем локальном хранилище данных могут быть объекты, имеющие отношение к объекту, который вы хотите отключить. Чтобы сделать это правильно, сначала откройте все эти объекты, а затем откройте целевой объект.
Ответ 3
Я получил это, чтобы работать, но используя следующий рабочий процесс.
Когда я создаю новый объект и готов к сохранению, выполните следующие 2 шага
newThing.saveEventually(nil)
newThing.pinInBackgroundWithBlock { (res, errn) -> Void in
// pinning is required for offline delete to work correct
if errn != nil { return }
//self.presentingViewController?.dismissViewControllerAnimated(true, completion: { () -> Void in
// dismiss modal if required...
//})
}
В моем представлении таблицы я удаляю как это
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
self.myDataSource[indexPath.row].deleteEventually()
self.myDataSource.removeAtIndex(indexPath.row)
self.myDataSource.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
Процесс получения, в пределах того же вида таблицы
- Локальный запрос - из локального хранилища данных - это напрямую обновляет мое табличное представление - называется первым
- Сетевой запрос - это делает открепление и закрепление, обновляет источник данных tableview - после этого он снова вызывает локальный запрос, чтобы обновить таблицу.
Вот мой сетевой запрос
func networkQuery() {
let nquery = theQuery()
nquery.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let temp = objects as? [YourObjectType] where error == nil {
PFObject.unpinAllInBackground(self.myDataSource, block: { (resultBool, error) -> Void in
if error != nil { return }
PFObject.pinAllInBackground(temp, block: { (resultBool, error) -> Void in
if error != nil { return }
self.localQuery()
})
})
}
}
}
Я попытался сломать это создание новых элементов, и в автономном режиме - удаление элементов и офлайн - все работает. Надеюсь, что это поможет, не удалось найти ни одного примера в Интернете, поэтому только работайте с трейлом и ошибкой.... болезненный процесс, но теперь он работает как шарм.
Ответ 4
После выполнения R и D на parse.com
Я узнаю, что вы можете отменить объекты из локального хранилища, как только они будут сохранены в облаке. Анализ B'coz в основном используется для хранения данных в облаке, поэтому он позволяет отказаться от данных после сохранения в облаке.
например.
- (void)syncDataToCloud:(id)sender {
PFQuery *qry = [PFQuery queryWithClassName:@"Person"];
[qry fromLocalDatastore];
NSArray *arr = [qry findObjects];
[PFObject saveAllInBackground:arr block:^(BOOL succeeded, NSError *error) {
if (succeeded) {
DisplayAlert(@"Sync successful.");
} else {
DisplayAlert(@"Sync unsuccessful");
}
}];
[PFObject unpinAll:arr];
}
он работает для меня...!!:)