2016-10-13 2 views
2

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

У меня есть контроллер табличного представления, который заполняется запросом к таблице в Parse. Для этого я создаю запрос в соответствующей таблице, а затем сохраняю бит информации в массивы, например. массив для имен пользователей и текстовых сообщений и объекта идентификаторов:

var postGrabber: [PFObject] = [PFObject]() 
var pSenderUsername: [String] = [String]() 
var pPostBody: [String] = [String]() 
var objectId: [String] = [String]() 

можно затем использовать indexPath клетки, чтобы получить соответствующую информацию из вышеупомянутых массивов.

В каждой ячейке также есть UIButton (для голосования, а также для другой информации).

Like so...

Чтобы получить indexPath из которых была нажата клетка я использую:

let btnPos: CGPoint = sender.convert(CGPoint.zero, to: self.tableView) 
    let indexPath = self.tableView.indexPathForRow(at: btnPos)! 
    let rowToAction = indexPath.first! 

В качестве примечания, objectAtIndexPath (rowToAction) не похоже на работу в Swift 3, делает кто-нибудь знает альтернативу?

С этого момента я немного не уверен в наиболее эффективном способе обновления атрибута оценки таблицы Parse.

После просмотра документов Parse я могу потенциально использовать переменную счетчика, чтобы сохранить счет или массив.

Хотя, я думаю, что при использовании счетчика могут возникнуть проблемы с синхронизацией в случае, когда несколько пользователей пытаются получить доступ к данным в любой момент времени. (Не уверен)

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

ответ

0

Для того чтобы увеличить код numberOfUpVotes.

Вы можете использовать

[post incrementKey:@"numberOfUpVotes"]; 
[post saveInBackground]; 

Это обновит голоса асинхронно, а метод incrementKey является атомарным. Предположим, что у нас есть 5 пользователей, которые одновременно нажимают кнопку «вверх», значение для ключа «numberOfUpVotes» будет равно 5 вместо 1.

Кроме того, вы можете указать сумму приращения по:

[post incrementKey:@"numberOfUpVotes" byAmount:[NSNumber numberWithInt:2]] 

Но я не думаю, что это произойдет в вашем случае использования :)

Вы можете прочитать этот пост от Parse:

https://parse.com/questions/concurrency-management-in-parse

или вы можете увидеть мой вопрос:

iOS Parse.com updating objects

примечание: мой код в Objective-C, но это довольно легко преобразовать этот в Swift.

+0

Ах, спасибо, спасибо. Рад, что ты расчистил это для меня :)! –

+0

@ F.Bar Нет проблемы сопряжения: D –

+0

На стороне заметки, вы знаете какую-либо работу от использования следующего: 'let something = objectAtIndexPath (indexPath), чтобы получить идентификатор указанного объекта. Кажется, у меня проблема с нерешенными идентификаторами? –

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