2015-07-25 4 views
1

У меня небольшая проблема. Я работаю над приложением с использованием Parse backend. Так моя проблема: я уже получены все ObjectIds пользователей в классе _User так:Как сохранить извлеченные данные в другой класс в Parse

var userIds = [String]() 

    var userQuery = PFUser.query() 
     userQuery?.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in 

     if let users = objects { 

      self.userIds.removeAll(keepCapacity: true) 

     for object in users { 

      if let user = object as? PFUser { 

       if user.objectId != PFUser.currentUser()?.objectId { 


         self.userIds.append(user.objectId!) 

        } 

       } 

      } 

     } 

     println(userIds) 
    }) 

Теперь я хочу, чтобы сохранить все UserIds, которые хранятся в массиве «UserIds» в колонку в класс под названием «Что-то». так что код будет как:

var something:PFObject = PFObject(className: "Something") 
    something["users"] = // have problem here 

    something.saveInBackground() 

если я поставил UserIds здесь, это дает ошибку .. потому что UserIds массив, но колонка «пользователи» это строка .. но я хочу, чтобы сохранить все UserIds отдельно в колонке «пользователей», как он сохраняется в ObjectId колонке класса _User ..

+0

Если я правильно понял, вам нужно было бы создать столько объектов класса «Что-то», как у вас есть идентификаторы пользователей, и вы сохранили бы каждый объект индивидуально, таким образом вы могли бы заполнить таблицу для класса «Что-то», или вы хотите иметь один объект «Что-то» с массивом, содержащим идентификаторы пользователя? – MrMuetze

+0

Я хочу сохранить каждый объект отдельно в колонке «users» класса «Что-то». Первый, о котором вы говорите .. –

ответ

0

Ok, так что вы описываете должны выглядеть примерно так:

var userIds = [String]() 

    var userQuery = PFUser.query() 
    userQuery?.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in 

     if let users = objects as? [PFUser] { 

      var somethingObjects = [PFObject]() 

      self.userIds.removeAll(keepCapacity: true) 

      for user in users { 

       if user.objectId != PFUser.currentUser()?.objectId { 

        self.userIds.append(user.objectId!) // I don't know if this is necessary anymore for your usecase 

        var something:PFObject = PFObject(className: "Something") 
        something["users"] = user.objectId 
        somethingObjects.append(something) 
       } 

      } 

      PFObject.saveAllInBackground(somethingObjects) 
     } 
    }) 

в этом случае, вы создаете ряд объектов, которые сохраняются, но вы можете переименовать столбец «users» в «user», так как вы o за исключением одного объекта в строке.

Я не работал с синтаксическим анализом через некоторое время, поэтому может быть способ оптимизировать количество вызовов API, которые вы должны выполнить.

+0

Это работало: D, но есть еще одна проблема, с которой я застрял сейчас. Этот запрос находится в мой метод viewDidLoad, и я хочу, чтобы он был там только, теперь, когда я открываю приложение, он снова сохраняет тех же пользователей, поэтому моя проблема заключается в том, что он не должен снова сохранять их все и добавлять те, которых там нет.:/ –

+0

Вы можете получить свои «что-то» объекты и проверить, какие идентификаторы уже добавлены. Или вы пишете облачную функцию, которая имеет дело с этой проблемой на стороне сервера. Также уменьшит ваши вызовы API до 1. Вы бы назвали эту облачную функцию массивом userIds, который хотите добавить, но это другая проблема, я думаю. :) Если бы мой ответ был полезным, не могли бы вы отметить это как ответ? – MrMuetze

+0

Не могу проверить это:/Я просто хочу сохранить пользователей, которых там нет. :( –

1

Я новичок здесь, и я не могу прокомментировать ответ, где вы попросили о помощи. Во всяком случае, что вы хотите сейчас сохранить только новых пользователей, как вы сказали:

Я просто хочу, чтобы сохранить пользователей, которые не являются там

Ну, Есть некоторые предложения:

  1. Вы можете получить свой класс пользователя и проверить новых пользователей вручную в приложении, а затем отправить новые в свой класс.

  2. Вы можете создать новый столбец в своем классе User, например «сохраненный», где содержится логическое значение, указывающее, если вы уже сохранили этого пользователя в своем пользовательском классе или нет. Помните также, всегда делают

    user["saved"] = false

при создании нового пользователя, а затем просто сделать:

let search = PFQuery(className: "_User") 

search.whereKey("saved", equalTo: false) 

, чтобы эти не спасли пользователей.

Настоятельно рекомендую второй вариант.