Проблема с дублирующимися результатами поиска и обновлением массива XMLParser - PullRequest
0 голосов
/ 02 февраля 2011

Я использую NSXMLParser для разбора ext.Данные API.Я также использую общий массив Singleton var для поддержки информации, полученной из ext API.

Эта информация является динамической и изменяется, когда пользователь вводит что-либо в UISearchBar

Теперь, как только пользователь что-то наберет, я удаляю существующее содержимое массива с помощью [retrievedArray removeAllObjects];

Таким образом, это обновило retrievedArray на основе текущих терминов в строке поиска.

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

Я все еще пытаюсь решить проблему.Пожалуйста, предложите еще несколько исправлений.

Не могли бы вы предоставить мне исправление.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2011

Прежде всего, я думаю, что одноэлементный подход не может быть лучшим способом для того, что вы делаете. Но убедитесь, что вы синхронизируете весь изменяемый доступ к массиву. Вместо того, чтобы позволять синглтону возвращать NSMutableArray для любого объекта и их мамы (super) для использования, вам нужно иметь такие методы, как addObject, removeObject, clear с @synchronize блоками или любым другим видом. заблокировать вы решаете. Я все еще вижу проблемы с этим подходом, потому что код, вызывающий addObject, remove и clear, также должен быть синхронизирован. Возможно, при каждом запросе на автоматическое заполнение вы можете использовать делегата или опубликовать NSNotification, содержащий метку времени, символы, которые пользователь набрал для получения данных, и NSArray результатов. В это время вы можете увидеть, является ли ответ все еще действительным, отбросить все недействительные ответы и обновить пользователя только содержимым самого последнего действительного NSArray

0 голосов
/ 02 февраля 2011

Нет, я не думаю, что это так, если вы не выполняете поиск в отдельном потоке и очищаете массив в другом.Если нет, то, вероятно, ошибка в логике поиска.

...