#iphone #objective-c #ios #nsmutablearray #uisearchbar
#iPhone #objective-c #iOS #nsmutablearray #uisearchbar
Вопрос:
У меня есть два NSMutableArrays; name и NameID В моем tableview, только имя будет отображаться как textLabel.
Я хочу искать имена с помощью UISearchBar. Например;
name -- nameID
Stack 123
Over -1
NameID — это главное, что нужно использовать.
Итак, возможно ли связать два NSMutableArrays, чтобы всякий раз, когда пользователи выбирают Stack, он показывал 123?
Спасибо
Ответ №1:
Как насчет использования одного NSMutableDictionary
с именами в качестве ключей и идентификаторами в качестве значений?
Затем в вашей таблице массив данных можно найти с помощью [myNameDict allKeys]
.
Или вы можете сделать идентификаторы ключами, а имена значениями, и в этом случае все имена будут доступны в виде массива при вызове [myNameDict allValues]
.
Имейте в виду, что allKeys
и allValues
возвращают массивы, порядок которых не гарантируется.
Итак, вы могли бы, в качестве третьего варианта, поддерживать массив словарей, где каждый словарь имеет два ключа, name и id, значениями которых являются name и id. Затем вы объединили каждое имя и идентификатор в один объект (словарь) и можете быть уверены в порядке следования вашего массива пар имя / идентификатор.
Ответ №2:
Один из подходов может быть таким: вместо того, чтобы хранить данные отдельно, поскольку они имеют взаимосвязь, вы можете инкапсулировать их, скажем, в класс, Record
который имеет два поля name
и id
. Теперь удерживайте массив этого объекта (скажем recordList
).
Когда мы сможем выполнить поиск любого Record
с заданным searchText
значением следующим образом.
-(Record *) searchRecordWithName:(NSString *)searchText
{
Record *tempRecord;
for( tempRecord in recordList)
{
NSRange searchRange = [tempRecord.name rangeOfString:searchText options:NSCaseInsensitiveSearch];
if( searchRange.length>0 amp;amp; searchRange.location==0)
{
break;
}
}
return tempRecord;
}
Пожалуйста, исправьте приведенный выше код в соответствии с вашими потребностями. Здесь я думаю, что вы хотите найти NameID для того, чтобы record
имя начиналось с searchText (как вы видите, я использовал searchRange.location
==0`).
Предположим, в будущем вам нужно хранить больше деталей для записи, чем это будет проще.
Ответ №3:
Один из найденных мной простых способов заключается в том, чтобы соединить строки (name #NameID) и после этого разделить, чтобы получить обратно NameID.