Подтвердить что ты не робот

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


            }
        }

Я делаю запрос после открепления, и объект все еще существует.

4b9b3361

Ответ 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];
}

он работает для меня...!!:)