2015-04-15 4 views
-1

Я пытаюсь извлечь PFObject, добавить 1 к подсчету и повторно сохранить в Parse.Проблемы с извлечением и увеличением объекта Parse

Я использую Swift для успешного извлечения PFObject, но у меня возникают проблемы при попытке увеличить вложенное значение с помощью функции incrementKey().

я впервые попробовал:

var query = PFQuery(className:"Quests") 
    query.getObjectInBackgroundWithId(questId) { 
     (retrievedQuest: PFObject?, error: NSError?) -> Void in 
     if error != nil { 
      println(error) 
     } else { 
      if let theQuest = retrievedQuest { 
       if let options = theQuest["options"]{ 
        println(options[row]) 
        options[row].incrementKey("votes", byAmount: 1) 
       } 
      } 
     } 
    } 

Я получаю следующее сообщение об ошибке:

-[__NSDictionaryM incrementKey:byAmount:]: unrecognized selector sent to instance 0x7f8acaf97dd0 

следующий раз я попробовал:

var options = theQuest["options"] as! [PFObject] 

и получил: фатальную ошибку: NSArray элемент не удалось одобрать Swift элемент массива типа

Далее я попытался ломают элементы в моей PFObject попытаться увеличиваем «голоса» вручную

var query = PFQuery(className:"Quests") 
    query.getObjectInBackgroundWithId(questId) { 
     (retrievedQuest: PFObject?, error: NSError?) -> Void in 
     if error != nil { 
      println(error) 
     } else { 
      if let theQuest = retrievedQuest { 
       var options = theQuest["options"] as! NSArray 
       var theOption = options[row] as! NSDictionary 
       var theVotes = theOption["votes"] as! Int 
       theVotes++ 
       retrievedQuest?.saveInBackground() 

Это, вероятно, довольно очевидно, что увеличивающиеся theVotes этот способ не влияет на retrievedQuest, сохранение retrievedQuest не отражает никакого обновления голосов.

Любые идеи о том, как я могу получить желаемый результат?

+0

Что такое варианты? Массив PFObjects? Если это так, используйте приведение типов, чтобы сообщить Swift об этом, но ваше исключение говорит, что параметры фактически представляют собой mutableDictionary, который не реализует incrementKey: byAmount – Paulw11

+0

NSDictionary не имеет метода 'incrementKey'. –

+0

Я добавил в свой исходный вопрос дополнительную информацию. Спасибо за руководство до сих пор. – dliebeskind

ответ

0

Swift не знает тип options. Как говорит Paulw11, вам нужно использовать правильный тип. Если опции является массивом PFObject с (как код подразумевает), то изменение

if let options = theQuest["options"]{ 
    println(options[row]) 
    options[row].incrementKey("votes", byAmount: 1) 
} 

в

if let options = theQuest["options"] as? [PFObject] { 
    println(options[row]) 
    options[row].incrementKey("votes", byAmount: 1) 
} 

может устранить проблему.

+0

Спасибо rickerbh - Я пытался это сделать, но используя как! привели к фатальной ошибке ошибки: элемент NSArray не соответствовал типу элемента Swift Array. Как использовать? привел к тому, что варианты оценивали до нуля. – dliebeskind

0

Just FYI - Я решил это, исключив массив опций, и вместо этого, каждый из них будет уникальным свойством класса. Теперь можно использовать только

theQuest.incrementKey("option\(row)")