2016-01-04 2 views
0

У меня есть проблема, и я мог бы реально использовать некоторую помощь ..Swift не может обновить Синтаксическую объект

У меня есть метод ниже, и все работает нормально, до линии 907 .. Когда речь заходит за object3.saveInBackgroundWithBlock , он ничего не делает .. Даже ошибки! Он никогда не спасает объект, и он никогда не попадает внутрь блока.

Любая идея, почему?

func addUserToThoseIFollow(sender: UIButton) { 
    //self.navigationItem.rightBarButtonItem?.enabled = false 
    sender.enabled = false 

    let userQuery = PFQuery(className: "_User") 
    let userQuery2 = PFQuery(className: "_User") 

    userQuery.getObjectInBackgroundWithId(PFUser.currentUser().objectId) { (object: PFObject!, error: NSError!) -> Void in 
     if error == nil { 

      // If I already follow some users, make 
      // an array with them, add the user I 
      // want to follow and save. Else, 
      // just save an array, with that one user. 

      if object["following"] != nil { 
       var thoseIFollow = object["following"] as! [String] 
       thoseIFollow.append(self.userID!) 

       object["following"] = thoseIFollow 
      } 
      else { 
       var myUsers = [String]() 
       myUsers.append(self.userID!) 

       object["following"] = myUsers 
      } 

      object.saveInBackgroundWithBlock({ (ok: Bool, error2: NSError!) -> Void in 
       if error2 == nil { 
        self.followButton.setTitle("Unfollow", forState: .Normal) 
        self.followButton.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.7) 

        sender.enabled = true 

        self.doIFollow = true 
       } 
      }) 
     } 
    } 

    // Add me to his followers 

    userQuery2.getObjectInBackgroundWithId(self.userID) { (object3: PFObject!, error3: NSError!) -> Void in 
     if error3 == nil { 
      // If the user I just followed, has already followers, make 
      // an array with them and add the current user to 
      // them. Else, just save an array, with the current user. 

      if object3["followers"] != nil { 
       var hisFollowers = object3["followers"] as! [String] 

       hisFollowers.append(PFUser.currentUser().objectId) 
       object3["followers"] = hisFollowers 

       /* Line 907 */ object3.saveInBackgroundWithBlock({ (ok7: Bool, error7: NSError?) -> Void in // Line 907 
        if error7 == nil { 
         print("ok") 
        } 
        else { 
         print(error7) 
        } 
       }) 
      } 
      else { 
       var hisFollowers = [String]() 

       hisFollowers.append(PFUser.currentUser().objectId) 
       object3["followers"] = hisFollowers 

       object3.saveInBackgroundWithBlock({ (ok5: Bool, error7: NSError!) -> Void in 
        print("otinanai") 

        if error7 != nil { 
         print(error7.localizedDescription) 
        } 
       }) 
      } 
     } 
    } 
} 
+0

Вы пытались 'object3.saveEventually()'? –

+0

Это просто, что у вас NSError? в этом вызове, хотя вы использовали NSError! в другое время? – Russell

+0

@ Тихонов Александр Да! Ничего не изменилось. –

ответ

0

Попытка # 1

Что PFUser.currentUser().objectId вернуться? Если он возвращает nil, значит, он не работает.

Попытка # 2

Available Parse Types

До сих пор мы использовали значения с типом NSString, NSNumber и PFObject. Parse также поддерживает NSDate и NSNull. Вы можете встраивать объекты NSDictionary и NSArray для хранения более структурированных данных в пределах одного PFObject.

Попробуйте использовать var hisFollowers = [NSString]() вместо var hisFollowers = [String]()

+0

Он возвращает мой объектId, как и должно быть. –

0
self.userID 

Где именно это приходит? Был ли ваш чек, не является ли он дополнительным?

+0

Все, что было до объекта3.saveInBackgroundWithBlock работает отлично! Я получаю правильный объект.Я проверил .. –

+0

Скорее всего, не разрешено использовать несколько запросов в 1 То же самое время. – JVS

0

Прокомментируйте первый запрос и посмотрите, работает ли он.

Каждый объект Parse может иметь только один фоновый поток, выполняющийся за это время. Скажем, вы сохраняете объект, затем сразу же в следующей строке (не внутри его обратного вызова), отредактируйте его и затем сохраните снова. Второе сохранение не будет вызываться, так как первое сохранение все еще выполняется. Вы даже не получаете ошибку. Вы получаете нулевое уведомление о том, что этого вызова не произошло.

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

Решение состоит в том, чтобы вставить второй запрос внутри обратного вызова первого.

Я думаю, что есть библиотека PromiseKit, которую вы можете загрузить, которая добавляет javascript-функциональность в iOS, что делает ее более похожей на то, как вы связываете эти вызовы в облачном коде, но я ее не использовал.

+0

Я прокомментировал первый getObject и, к сожалению, ничего не изменилось! Тем не менее, он не попадает в блок сохранения. –

+0

Попробуйте изменить три строки над строкой 907 только на object3 ["followers"]. Append (PFUser.currentUser(). ObjectId) и добавьте некоторые точки останова, чтобы убедиться, что это вызывается. Или NSLog, чтобы распечатать значение object3 ["followers"] перед добавлением идентификатора объекта и после, чтобы убедиться, что он добавлен. –

Смежные вопросы