Parse.com Получить пользователя, которому нравится объект

Итак, я правильно настроил свои отношения в Parse, используя следующий код:

var user = PFUser.currentUser() var relation = user.relationForKey("likes") relation.addObject(self.post) user.saveInBackgroundWithBlock({ (Bool, error) -> Void in println("user likes this post") // Used for tracking in the PFTableCell for UI parts self.userLikes = true })

Когда представление загружается, мне нужно изменить кнопки на «Нравится», цвет и т. Д. Я хотел бы получить всех пользователей, которым понравился этот конкретный пост, но не могу понять запрос? Это даст мне другую полезную информацию (например, я могу отобразить имена пользователей, которым понравился пост).

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

var user = PFUser.currentUser()
var relation = user.relationForKey("likes")
relation.query().findObjectsInBackgroundWithBlock {
    (objects: [AnyObject]!, error: NSError!) -> Void in
    if error != nil {
        // There was an error
        println(error)
    } else {
        // objects has all the Posts the current user liked and do something.
        println(objects)         
    }
}

Но это не то, что я после? Я использую Swift и Parse SDK, но с радостью получу ответ в Obj C и переведу. Предложение документации Parse неверно: https://www.parse.com/docs/ios_guide#objects-pointers/iOS Я мог бы сохранить лайк для сообщения, а не для пользователя, но это означало бы, что мне пришлось бы открыть права доступа к сообщению, что запрещено.


person ExoticChimp    schedule 19.03.2015    source источник


Ответы (1)


Проблема со структурой вашей базы данных. У вас должны быть не только объекты User, но и объекты Post. Пост может иметь отношение лайков, которое указывает на всех пользователей, которым понравился пост. Когда Пользователю нравится пост, он добавляется в отношение лайков поста. Таким образом, чтобы получить необходимую информацию, вам просто нужно посмотреть на отношение Post.

Что вы имеете в виду под открытыми правами доступа к Почте? Вы хотите, чтобы пост был прочитан только всеми пользователями, кроме Пользователя, который его разместил?

Или проблема с предоставлением доступа к объектам пользователя? Я не уверен, действительно ли это проблема, поскольку вы можете просто быстро подсчитать объекты пользователя в отношении, фактически не просматривая данные в объектах пользователя. Вы можете создавать объекты Like, но я не думаю, что это необходимо.

person Josh Gafni    schedule 19.03.2015
comment
Моя структура базы данных в порядке, у меня есть объекты Post и объекты User. Проблема в том, что, когда я выполняю функцию ratio.query() для отношения object.relationForKey(likes), она возвращает значение null (предположительно, потому что сообщениям не нравятся пользователи). Я следил за документацией parse.com, но в одном из их руководств предлагается установить отношение лайков к сообщению (т.е. сообщение понравилось пользователю). Однако для этого я считаю, что все сообщения должны иметь общедоступный доступ для чтения и записи, тогда как я хочу, чтобы они имели только общедоступное чтение (за исключением пользователя, который его создал, конечно) - person ExoticChimp; 19.03.2015
comment
по сути, я устанавливаю успешное сохранение отношения, которое ПОЛЬЗОВАТЕЛЬ уже любит POST. Теперь я хочу иметь возможность получить обратное, то есть всех ПОЛЬЗОВАТЕЛЕЙ, которым нравится этот POST - person ExoticChimp; 19.03.2015
comment
Я понимаю проблему. Чтобы обновить отношение лайков, вам нужен доступ на запись к посту. К сожалению, Parse не позволяет устанавливать доступ для чтения/записи по полю. Я действительно не думаю, что имеет значение предоставление доступа к Post, но если вы так думаете, вы можете создать два разных типа объектов Post — Post и PostDetail. Post имеет указатель postDetail. Пост читается только, кроме постера, но PostDetail доступен для записи всем. PostDetail содержит отношение лайков. - person Josh Gafni; 19.03.2015
comment
@JoshGafni прав. У тебя наоборот. Вы сказали, что структура моей базы данных в порядке, у меня есть объекты Post и объекты User. Проблема в том, что, когда я выполняю функцию ratio.query() для отношения object.relationForKey(likes), она возвращает значение null (предположительно, потому что сообщениям не нравятся пользователи). Для каждого поста вам нужно создать PFRelation и добавить текущего пользователя. Затем вы запрашиваете PFRelation сообщений для всех пользователей, которым понравилось это сообщение. Вот и все. - person ericgu; 19.03.2015
comment
ваше здоровье. Я следил за документами Parse.com, в которых предлагалось установить связь с пользователем, но я, вероятно, воспользуюсь вашим предложением. почему минус? Это общий вопрос, на который нет четкого ответа, кроме как здесь (см. Форумы синтаксического анализа) - person ExoticChimp; 19.03.2015
comment
Если вы добавляете отношение к объекту Post, разве это не потребует предоставления общедоступного разрешения на запись для сообщений? - person adamdport; 11.11.2015