2015-08-26 4 views
0

У меня есть кнопка, которая подталкивает к фиду, я хотел бы записать имя элемента фида в массиве («itemChosen») в моем классе PFUser при каждом нажатии кнопки:Невозможно добавить String в массив для PFUser

@IBAction func buttonTapped(sender: UIButton) { 

     PFUser.currentUser()!.addObject(feedItem.feedItemName, forKey: "itemChosen") 
     PFUser.currentUser()!.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
      println(PFUser.currentUser()?.objectForKey("itemChosen")) 
     }) 
} 

Я получаю ошибку:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Operation is invalid after previous operation.' 

Если я использую:

PFUser.currentUser()!.setObject(feedItem.feedItemName, forKey: "itemChosen") 

можно сохранить имя в качестве особой строки, но я хотите добавить его в массив. Почему не работает addObject и как я могу ее исправить?

+0

_User класс лучше для входа в систему и зарегистрироваться целей. Было бы создать новый класс в синтаксический анализ, тогда, когда вы будете готовы к сохранению данных, вы свяжете их только с этими данными. – Lamar

ответ

1

Попробуйте сделать это:

@IBAction func buttonTapped(sender: UIButton) { 
    if PFUser.currentUser()!["itemChosen"] == nil { PFUser.currentUser()!["itemChosen"] = [String]() } 
    (PFUser.currentUser()!["itemChosen"] as! NSMutableArray).addObject(feedItem.feedItemName) 
    PFUser.currentUser()!.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
     println(PFUser.currentUser()?.objectForKey("itemChosen")) 
    }) 
} 

Проблема заключается в том, что PFUser.currentUser!["itemChosen"] может быть nil.

Edit: Я нашел способ сделать это с помощью Xcode 6:

extension PFUser { 
    var param: [String] { 
     get { 
      if let x = self["itemChosen"] as? [String] { 
       return x 
      } else { 
       return [] 
      } 
     } 
     set(val) { 
      self["itemChosen"] = val 
     } 
    } 
} 

@IBAction func buttonTapped(sender: UIButton) { 
    PFUser.currentUser()!.param.append(feedItem.feedItemName) 
    PFUser.currentUser()!.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
     println(PFUser.currentUser()?.objectForKey("itemChosen")) 
    }) 
} 
+0

Спасибо за ваш ответ .. Я пробовал это, и то, что я получаю, является ошибкой в ​​строке 2 '' операнда постфикса! должен иметь необязательный тип; type is() -> PFUser? ''- поэтому я удаляю!, и я получаю следующую ошибку''() -> PFUser не имеет члена с именем 'subscript''' – SamYoungNY

+0

@SamYoungNY извините, забыли написать инициализатор. Отредактировано сейчас. –

+0

спасибо, но, к сожалению, я получаю те же ошибки – SamYoungNY