Незадължителни типове с 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