Я создаю приложение для iPhone.У меня есть файл .plist, который содержит словарь слов (около 180К из них).
Есть текстовое поле, где пользователь начинает вводить слово.Когда он печатает, я использую метод делегата textField:shouldChangeCharactersInRange:replacementString:
, чтобы убедиться, что он вводит только abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.
Когда пользователь впервые нажимает на textField, я загружаю NSMutableArray с именем finalWords
(объявленный в заголовке, сохраненный и синтезированный) с содержимым .plist (каждое слово является строкой NSString).Когда пользователь вводит букву, я запускаю это
-(void)filterWordsForString:(NSString *)string
{
NSRange *range;
for (int i=[finalWords count]-1 ; i >=0 ; i--)
{
range = [[finalWords objectAtIndex:i] rangeOfString:string];
if (range.location == NSNotFound)
{
[finalWords removeObjectAtIndex:i];
}
}
}
Моя цель - остановить пользователя всякий раз, когда он вводит строку, которая не является частью реального слова (согласно моему словарю).Этот код работает в том смысле, что он сокращает возможные слова, которые пользователь печатает по ходу дела.Таким образом, как только он печатает букву, которая делает его таким образом, что он не может завершить его до слова, я не позволяю вводить букву.Кроме того, как только есть уникальное завершение, я продолжаю и заполняю textField законченным словом.
Проблема в том, что сначала это мучительно медленно!Для первой буквы требуется несколько секунд, а для второй - не намного меньше.В-третьих, скорость довольно разумная.Есть ли способ, которым я могу резко ускорить этот процесс фильтрации?
Спасибо.