Представьте У меня есть следующие NSDictionary
Как получить IndexPath от NSDictionary
dict = {
"a" = [
obj1,
obj2,
obj3
],
"b" = [
obj4,
obj5
],
"invalid" = [
obj6,
obj7,
obj8
],
"c" = [
obj9,
obj10,
obj11
]
}
Эти данные используются для заполнения TableView
с помощью секции из следующего NSArray
:
arr = @[@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z"];
У меня есть следующий метод, который Я пользуюсь найти a объект
- (void)selectRowWithId:(NSNumber *)uid {
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(id == %@)", uid];
NSArray *filteredDictArray = [obj filteredArrayUsingPredicate:predicate];
if ([filteredDictArray count] > 0) {
NSIndexPath *targetIndexPath = nil;
//trying to find the NSIndexPath here
[[self tableView] selectRowAtIndexPath:targetIndexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
[self tableView:[self tableView] didSelectRowAtIndexPath:targetIndexPath];
}
}];
}
Скажите, у меня есть объект obj10
.
Основываясь на моем NSDictionary
NSArray
и NSIndexPath
является Section:2 Row:1
Как я могу получить это значение, если я знаю только obj10
?
Update (Solution)
Так с комбинацией идей за ответами каждого и моя здесь следующая я использовал в случае, если это полезно для кого-то. BTW: Это для iOS9
- (void)selectRowWithId:(NSNumber *)uid {
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(id == %@)", uid];
NSArray *filteredDictArray = [obj filteredArrayUsingPredicate:predicate];
if ([filteredDictArray count] > 0) {
//trying to find the NSIndexPath here
NSIndexPath *targetIndexPath = [NSIndexPath indexPathForRow:[[dict objectForKey:key] indexOfObject:filteredPersonsArray[0]] inSection:[arr indexOfObject:key]];
[[self tableView] selectRowAtIndexPath:targetIndexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
[self tableView:[self tableView] didSelectRowAtIndexPath:targetIndexPath];
}
}];
}
Правильно ли ваш json. Потому что для всего ключа в словаре он будет массивом. –
Возможно, это неправильно, я обновил ключи для хранения массивов. В основном у меня есть каждый ключ в словаре, содержащий массив объектов. Как мне это показать? Не стесняйтесь редактировать. – RoLYroLLs
Почему раздел = 2? Словарь не сортирует свои ключи. Поэтому вы должны это сделать. Что такое код для этого? Простая буквенно-цифровая сортировка? Тогда это должен быть раздел = 3, не так ли? –