Я хочу отфильтровать список стран на основе либо названия страны, либо кода страны ISD. Например, если пользовательские типы «9», Индия должна быть добавлена в фильтрованный массив, потому что ISD-код Индии «+91». Мой источник данных содержит всю информацию, как название страны, ISD код и т.д ..Получение ошибки, связанной с типом объекта NSDictionary
Вот как устроена моя массива:
- (void)viewDidLoad
{
[super viewDidLoad];
arrTotalCountries = [[NSMutableArray alloc] init];
arrFilteredCountries = [[NSArray alloc] init];
NSDictionary *dic1 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1",@"India",@"IN",@"+91",nil] forKeys:[NSArray arrayWithObjects:@"CountryId",@"CountryName",@"CountryCode",@"ISDCode",nil]];
NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"2",@"Australia",@"AU",@"+42",nil] forKeys:[NSArray arrayWithObjects:@"CountryId",@"CountryName",@"CountryCode",@"ISDCode",nil]];
NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"3",@"New Zealand",@"NZ",@"+63",nil] forKeys:[NSArray arrayWithObjects:@"CountryId",@"CountryName",@"CountryCode",@"ISDCode",nil]];
NSDictionary *dic4 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"4",@"South Africa",@"SA",@"+94",nil] forKeys:[NSArray arrayWithObjects:@"CountryId",@"CountryName",@"CountryCode",@"ISDCode",nil]];
NSDictionary *dic5 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"5",@"England",@"EN",@"+75",nil] forKeys:[NSArray arrayWithObjects:@"CountryId",@"CountryName",@"CountryCode",@"ISDCode",nil]];
NSDictionary *dic6 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"6",@"Israel",@"IS",@"+86",nil] forKeys:[NSArray arrayWithObjects:@"CountryId",@"CountryName",@"CountryCode",@"ISDCode",nil]];
NSDictionary *dic7 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"7",@"Afghanistan",@"AF",@"+27",nil] forKeys:[NSArray arrayWithObjects:@"CountryId",@"CountryName",@"CountryCode",@"ISDCode",nil]];
NSDictionary *dic8 = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"8",@"Ireland",@"IR",@"+18",nil] forKeys:[NSArray arrayWithObjects:@"CountryId",@"CountryName",@"CountryCode",@"ISDCode",nil]];
[arrTotalCountries addObject:dic1];
[arrTotalCountries addObject:dic2];
[arrTotalCountries addObject:dic3];
[arrTotalCountries addObject:dic4];
[arrTotalCountries addObject:dic5];
[arrTotalCountries addObject:dic6];
[arrTotalCountries addObject:dic7];
[arrTotalCountries addObject:dic8];
[self filterContentForSearchText:@"9"];
}
А вот как я пытаюсь фильтровать массив. Я только что прошел статическую «9» для целей тестирования.
- (void)filterContentForSearchText:(NSString *)searchText
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SELF.CountryName BEGINSWITH[cd] %@) OR (SELF.ISDCode BEGINSWITH[cd] %@)", searchText];
NSArray *filtered = [arrTotalCountries filteredArrayUsingPredicate:predicate];
NSLog(@"%@",[filtered description]);
}
Я получаю следующую ошибку во время работы.
Нагрузочное приложение из-за неперехваченное исключение «NSInvalidArgumentException», причина: «Не можем сделать операцию подстроки с чем-то, что не является строка (LHS = +91 ки = ViewController)»
Я думаю, это потому, что в словаре есть значение типа «+91» для ключа «ISDCode». Как я могу решить эту проблему.
Пожалуйста, помогите мне. Я отчаянно нуждаюсь в ответе.
Спасибо заранее!
Как в стороне, вам не нужно явно вводить 'SELF.' в предикат, поскольку это неявно сделано для вас. – Wain
@ Wain, Он работал для меня как шарм. Я решил свою проблему. Большое вам спасибо за ваш ответ. Upvoted & Принято! – NSPratik