Swift - Проблемы с подпиской на пользователей и отписыванием от них при поиске через UISearchController [Parse]

Добрый день,

Сегодня у меня проблемы с синтаксическим анализом.

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

Моя проблема заключается в том, что я ищу определенного пользователя и пытаюсь следовать за ним: поэтому я ищу конкретного пользователя, говорю «тест», он отображается, как должен, но когда я нажимаю «Follow», а затем возвращаюсь к синтаксическому анализу, чтобы увидеть, «Я» "Последовал тест, я могу другой результат.

В нем говорится, что я следил, например, за «тестером», который был создан первым пользователем. Кажется, что он следует за ячейкой, а теперь и за идентификатором пользователя ...

После этого мне удалось получить пользователей в алфавитном порядке, но здесь та же проблема, за исключением того, что он следует за первым пользователем в алфавитном порядке, например, если у меня есть имя пользователя, которое начинается с «A»!

Я не знаю, как решить эту проблему, поэтому надеюсь, что кто-то здесь… Я принимаю и ценю всевозможные советы и ответы!


person Community    schedule 04.12.2015    source источник


Ответы (1)


Вам нужно проверить, активен ли UISearchController внутри didSelectRowAtIndexPath. Прямо сейчас вы выбираете только из массива users, а не из массива searchResults.

Я также настоятельно рекомендую провести рефакторинг вашего кода, отказавшись от объектных идентификаторов и указателей. Намного проще выполнять запросы и работать с указателями, чем напрямую обращаться к их идентификаторам объектов.

Вот ссылка на другой вопрос на который я ранее отвечал, где я даю полный пример использования UISearchController для поиска по именам пользователей в Parse .. Надеюсь, это поможет!

person Russell    schedule 04.12.2015
comment
Привет, спасибо за ответ, я видел ваш пост раньше и нашел его очень полезным! Я обновил код другим фрагментом кода, который я написал, что дает мне ту же ошибку ... Он действительно следует за правильным пользователем, когда я выбираю его .. - person ; 04.12.2015
comment
Если вы можете быстро пройти через это и посмотреть, заметите ли вы что-нибудь не так с этим, я попробую переписать его после вашего другого поста! Спасибо еще раз - person ; 04.12.2015
comment
Я предполагаю, что это, вероятно, проблема с типами данных. Является ли поле follower вашего followers класса указателем? Если это так, вам следует назначить ему объект User, а не атрибут objectId. following["follower"] = PFUser.currentUser()! вместо following["follower"] = PFUser.currentUser()!.objectId. Как уже упоминалось, вы не должны напрямую ссылаться на objectIds ни в одном из запросов или сохранений. - person Russell; 04.12.2015
comment
последователь и последующий - это строки в синтаксическом анализе, а не указатели .. Это то, что мне нужно? - person ; 04.12.2015
comment
Это абсолютно то, что вам нужно. Взгляните на пример проекта Parse Anypic. В частности, вы хотите посмотреть, как реализуется класс Activity с помощью таких указателей, как fromUser и toUser. Anypic - это фантастический пример полноценного приложения, и определенно стоит потратить некоторое время, чтобы разобраться в нем. parse.com/tutorials/anypic - person Russell; 04.12.2015
comment
Хорошо, большое спасибо за помощь, я дам вам знать. - person ; 04.12.2015
comment
Я сделал для них оба указателя (последователь и подписка). Я также смотрю на ваш другой пост, но я действительно не могу понять его ... Когда я редактирую его с тем, что вы упомянули выше, я получаю некоторые ошибки, и когда я исправляю их и запускаю свое приложение, я получаю Invalid ключ для подписки, ожидаемый * _User, но получил строку, когда я пытаюсь следовать .. Это вроде как имеет смысл для меня, но я просто не уверен, какие части мне нужно отредактировать! худшая часть того, чтобы быть новичком .. Не могу дождаться, чтобы научиться этому ..! - person ; 05.12.2015
comment
Я знаю, что это дерзко и, вероятно, раздражает вас, но не могли бы вы указать еще на несколько вещей, чтобы я мог завершить эту часть своего проекта! Вы не представляете, насколько я буду признателен за помощь! - person ; 05.12.2015
comment
Не беспокойтесь, вам придется поменять приличную сумму. Вместо массива String для идентификаторов объектов вам понадобится массив PFUser. Аналогичным образом, вместо того, чтобы напрямую добавлять к нему objectIds, вы будете добавлять сами PFUser объекты. При запросе вместо whereKey("follower", equalTo: PFUser.currentUser()!.objectId!) будет просто whereKey("follower", equalTo: PFUser.currentUser()!). Ошибка выглядит так, как будто одна из вышеперечисленных была проигнорирована, поскольку она получила String, но ей нужен указатель PFUser. Трудно сказать, что еще, не увидев обновленного кода - person Russell; 05.12.2015
comment
Я обновил свой код, делаю это шаг за шагом, в основном я следил за вашим постом и искал пользователей. Но я получаю эту ошибку при запросе! .FindObjectsInBackgroundWithBlock {(objects: [AnyObject] ?, error: NSError?) - ›Пустота в нем говорит: невозможно преобразовать значение типа '([AnyObject]?, NSError?) -› Void 'ожидаемому типу аргумента' PFQueryArrayResultBlock? ' - person ; 05.12.2015
comment
Я только что попробовал это с помощью этого запроса! .FindObjectsInBackgroundWithBlock {(objects, error) - ›Void in It работает, но когда я ищу, я получаю пустые ячейки - person ; 05.12.2015
comment
Я думаю, что получаю пустые ячейки, потому что в cellForRowAtIndexPath нет данных, но данные, которые я обычно вставляю туда, не работают. Например: Cell.textlabel? .Text = ........ [indexPath.row] - person ; 05.12.2015
comment
Если вы используете Swift2, вы должны изменить (objects: [AnyObject]?, error: NSError?) -> Void на (objects: [PFUser]?, error: NSError?) -> Void. Отсюда вы получаете пустые ячейки, потому что cellForRowAtIndexPath не полностью реализован. Вы должны иметь возможность получить доступ к данным из возвращенных PFUser данных. Что-то вроде let userObject = users[indexPath.row] Cell.textlabel?.text = userObject["username"]. Также не забывайте голосовать за ответы / сообщения, когда это полезно :) - person Russell; 05.12.2015
comment
Можем ли мы открыть здесь чат? может быть проще - person ; 05.12.2015
comment
Как вы порекомендуете мне добавить следующее сейчас? показать вам код, который я использовал раньше, возможно, я смогу его использовать? - person ; 05.12.2015
comment
Я не совсем уверен, что вы просите, но вы сможете повторно использовать большую часть своего кода, который был ранее. Основное различие будет заключаться в назначении PFUser вместо objectId. following["follower"] = PFUser.currentUser()! вместо following["follower"] = PFUser.currentUser()!.objectId - person Russell; 05.12.2015
comment
Правильно, я добавил следующие данные, я думаю! Я обновил выше, так что вы можете видеть все .. У меня нет ошибок, но когда я запускаю свое приложение и пытаюсь выполнить поиск, ничего не происходит, пользователи не загружаются ... так что, вероятно, это снова связано с cellforRow или searchresultscontroller .. Я не могу хотя посмотри, что это такое! - person ; 05.12.2015
comment
Я не уверен насчет вложенной функции, которая у вас есть внутри loadUsers, но при условии, что это хорошо, попробуйте использовать точки останова, чтобы выяснить, какая часть головоломки не заполняется. Очень сложно отлаживать код, не зная всех деталей, и раздел комментариев, к сожалению, не слишком хорош для этого = / - person Russell; 05.12.2015
comment
Подождите, я ошибся, теперь он может работать! - person ; 05.12.2015
comment
Вау, действительно работает! Я не могу отблагодарить вас за помощь, которую вы мне оказали !! - person ; 05.12.2015
comment
Отлично сделано! Рад слышать, что он работает, и рад помочь! - person Russell; 05.12.2015
comment
Привет, Рассел, надеюсь, все в порядке, если я задам тебе быстрый вопрос! Как бы и где мне добавить представление активности при загрузке во время поиска? Это правильный код: let activityView = UIActivityIndicatorView (activityIndicatorStyle: .WhiteLarge) activityView.center = self.view.center activityView.startAnimating () self.view.addSubview (activityView)? - person ; 05.12.2015
comment
Это могло быть в том же духе. Я лично использую JGProgressHUD (github.com/JonasGessner/JGProgressHUD) для индикаторов своей активности, но есть множество доступные варианты. Если у вас все еще есть вопросы / проблемы, создайте еще один пост SO, чтобы другие люди также могли извлечь из этого пользу :) - person Russell; 06.12.2015
comment
Я проверю, спасибо! Я сделаю это, я только что сделал про UISearchcontroller. Поскольку я хочу искать, не видя фона представления таблицы ... Итак, когда я нажимаю на панель поиска, он загружает новое представление! вроде как панель поиска на странице Instagrams Discovery ... Зацените, если хотите;) - person ; 06.12.2015