Дополнительные типы с Parse и Swift

if  var findPublisher:PFQuery = PFUser.query(){
    findPublisher.whereKey("objectId", equalTo:quote.objectForKey("publisher").objectId)//error here
    }

Я получаю сообщение об ошибке Значение любого необязательного типа «Любой объект»? не развернутый. Я не знаю, что я сделал неправильно. Я новичок, так что поддержите меня :)


person Abhishek Mahesh    schedule 21.07.2015    source источник
comment
Вы пытаетесь использовать текущего вошедшего в систему пользователя в Parse или любого пользователя вне базы данных?   -  person Tillson    schedule 22.07.2015
comment
текущий пользователь вошел в Parse   -  person Abhishek Mahesh    schedule 22.07.2015


Ответы (2)


Это действительно то место, где вы бы давали каждой цитате указатель на пользовательский объект, а затем вы могли бы просто получить издателя цитаты без дополнительного запроса. Но если вы хотите сделать это таким образом, вы должны сделать:

let query = PFUser.query()!
query.whereKey("objectId", equalTo: (quote["publisher"] as! String)) // You can unwrap it as long as you are sure that quote is not nil, and the publisher is set.
query.getFirstObjectInBackgroundWithBlock({ (user: PFObject?, error: NSError?) in 
  // check for errors and use the object
})

Такой способ также создает проблемы безопасности Parse., так как любой, у кого есть идентификатор и ключ вашего приложения, может получить полный список пользователей.

person Tillson    schedule 21.07.2015

let findPublisher = PFUser.query()!
    findPublisher.whereKey("objectId", equalTo: (quote["publisher"] as! String))
        findPublisher.findObjectsInBackgroundWithBlock{
            (objects:[AnyObject]?, error:NSError?)->Void in

            if error == nil{
                let user:PFUser = (objects as NSArray).lastObject as! PFUser//error here
                cell.publisherLabel.text = user.username
        }
    }

В итоге я получаю сообщение об ошибке, в котором говорится, что AnyObject не может быть преобразован в NSArray?

person Abhishek Mahesh    schedule 21.07.2015
comment
Используйте метод getFirstObjectInBackgroundWithBlock. как в моем примере. Вы можете сделать это, потому что только один пользователь будет иметь каждый идентификатор. Кроме того, это должен быть комментарий к моему примеру, а не отдельный ответ. - person Tillson; 22.07.2015