2016-10-15 1 views
1

Я пытаюсь удалить объект из класса UserRequests через swift только в том случае, если объект принадлежит текущему пользователю, и этот запросResponded не равен true. Однако, я получаю сообщение об ошибке objects.deleteInBackground(), и функция все еще не работает, когда я удаляю эту строку.Как удалить объект из Parse через PFQuery

func deleteRequest(){ 
    let check = PFQuery(className: "UserRequests") 
    check.whereKey("requestResponded", equalTo: "True") 

    let query = PFQuery(className: "UserRequests") 
    query.whereKey("username", equalTo: (PFUser.currentUser()?.objectForKey("username") as! String)) 
    query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in 
     if objects != nil && error == nil{ 
      // Successfully retrieved the object 
      check.getFirstObjectInBackgroundWithBlock { 
       (object: PFObject?, error: NSError?) -> Void in 
       if error != nil || object == nil { 
        print("Not accepted.") 
        object!.deleteInBackground() 
        objects.deleteInBackground() 
       } else { 
        print("Successfully retrieved the object.") 
       } 
      } 
     }else{ 
      self.performSegueWithIdentifier("requestAccepted", sender: self) 
     } 
    }) 
} 

ответ

1

Это потому, что объекты - это список объектов. Вы должны удалить только объект 1 на 1.

Например:

for object in objects { 
    object.deleteInBackground() 
} 

Кроме того, поскольку два запроса принадлежат одному классу. Я предложил бы использовать 1 запрос

UPDATE

func deleteRequest(){ 
    let query = PFQuery(className: "UserRequests") 
    // the key "requestResponded" is not True 
    query.whereKey("requestResponded", equalTo: "False") 
    // for deleting the object is that it belongs to the current user 
    query.whereKey("username", equalTo (PFUser.currentUser()?.objectForKey("username") as! String)) 
    query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in 
     if error != nil{ 
      print(error) 
     } 
     // objects are those the key "requestResponded" is not True and belongs to the current user 
     for object in objects { 
      object.deleteInBackground() 
     } 
     // other case 
     if objects.count == 0 { // no match result found 
     } 
    }) 
} 

Я думаю, вы все еще скучаю состояние, когда для выполнения SEGUE

+0

Спасибо. Как я могу использовать 1 запрос для этого? –

+0

Во-первых, вам нужно подумать о таких условиях, как условие удаления объектов? каково условие выполнения segue? Как насчет еще случая? –

+0

Хорошо. Как упоминалось в вопросе, условие для удаления объекта состоит в том, что оно принадлежит текущему пользователю, и что ключ «requestResponded» не является True. –