Запрос Parse.com с быстрым 1.2 и строковым массивом

Я пытаюсь сделать запрос с parse.com, и я бы получил около 100 объектов за раз. Я использовал код быстрого примера на их веб-сайте, и приложение не строится с этим кодом. Поэтому я осмотрелся и обнаружил, что люди используют код, похожий на этот:

 var query = PFQuery(className:"posts")
    query.whereKey("post", equalTo: "true")
    query.findObjectsInBackgroundWithBlock({ (objects: [AnyObject]?, error: NSError?) -> Void in
        // do something


        self.myDataArray = objects as! [String]

    })

Это не работает, потому что я пытаюсь преобразовать PFObject в String

Мне нужно было бы получить одно значение из каждого объекта в массив быстрых строк [String]. Как получить только одно текстовое значение вместо PFObject и как поместить его в массив быстрых строк?


person Caleb L    schedule 23.04.2015    source источник


Ответы (2)


Я не очень хорошо говорю по быстрому, но проблема с кодом в том, что он пытается преобразовать возвращаемый PFObject в строку, но вы хотите извлечь строковый атрибут, поэтому (если вы действительно хотите это сделать):

for object in objects {
    var someString = object.valueForKey("someAttributeName") as String
    self.myDataArray.addObject(someString)
}

Но, пожалуйста, убедитесь, что вам нужно это сделать. Я заметил, что многие новые пользователи parse/swift (особенно те, кто заполняет таблицы) стремятся отказаться от возвращенных PFObject в пользу только одного из своих атрибутов. Рассмотрите возможность сохранения PFObject и извлечения атрибутов позже, когда они вам понадобятся. Возможно, вам понадобятся и другие атрибуты.

person danh    schedule 23.04.2015

Для начала я определенно рекомендую использовать шаблон «если позволяют» для квалификации ваших входящих данных. Это хорошая функция Swift, которая поможет избежать ошибок во время выполнения.

var query = PFQuery(className:"posts")
query.whereKey("post", equalTo: "true")
query.findObjectsInBackgroundWithBlock(
{ (objects: [AnyObject]?, error: NSError?) -> Void in

    // check your incoming data and try to cast to array of "posts" objects.
    if let foundPosts = objects as? [posts]
    {   
        // iterate over posts and try to extract the attribute you're after
        for post in foundPosts
        {   
            // this won't crash if the value is nil
            if let foundString = post.objectForKey("keyForStringYouWant") as? String
            {
                // found a good data value and was able to cast to string, add it to your array!
                self.myDataArray.addObject(foundString)
            }
        }
})
person Daniel Rushton    schedule 23.04.2015
comment
Это оставляет эту ошибку. Я попытался изменить его на [PFObject], но затем у меня появилось больше ошибок ниже. Использование необъявленного типа «сообщения» - person Caleb L; 23.04.2015