Поворот NSArray пользовательских объектов в алфавитном разрезе UITableView с индексом?

(hmm .. длинный название)

Если я начну с NSArray пользовательских объектов (каждый объект – Person), как это:

{ surname:Allen forename: Woody, surname:Baxter forename: Stanley, surname:Clay forename: Cassius } 

..и т.д..

Вы можете видеть, что массив уже находится в порядке фамилии. Как использовать этот массив для создания aa UITableView с заголовками разделов A, BC и т. Д., А также с индексированием на стороне, которая работает вертикально

  A B C 

РЕДАКТИРОВАТЬ

Я предполагаю, что я спрашиваю, как превратить мой массив объектов в массив разделов со всеми первыми буквами Surnames и Array Surname Array, который, возможно, является вложенным массивом, подобным этому:

 { letter: a { surname:Allen forename: Woody } letter: b { surname:Baxter forename: Stanley } etc } 

Фактически, возможно, только вложенный массив будет делать.

2 Solutions collect form web for “Поворот NSArray пользовательских объектов в алфавитном разрезе UITableView с индексом?”

Есть, вероятно, миллион способов сделать это 🙂 Вот один из них, который может работать (я уверен, что это можно сделать намного красивее, но поскольку никто не отвечает):

 NSMutableDictionary *aIndexDictionary = [[NSMutableDictionary alloc] init]; NSMutableArray *currentArray; NSRange aRange = NSMakeRange(0, 1); NSString *firstLetter; for (Person *aPerson in personArray) { firstLetter = [aPerson.surname substringWithRange:aRange]; if ([aIndexDictionary objectForKey:firstLetter] == nil) { currentArray = [NSMutableArray array]; [aIndexDictionary setObject:currentArray forKey:firstLetter]; } [currentArray addObject:aPerson]; } 

Непроверенные …

Ответ Джозефа Туры имеет ряд проблем, и он непроверен, как он упоминал. Вот вопросы:

1) [aPerson.name substringWithRange: aRange] выйдет из строя, если имя равно nil или @ "";

2) Если firstLetter уже находится в списке ключей, текущий массив не сбрасывается, чтобы указать на объект массива, который принадлежит первому элементу keyLetter. Поэтому, если currentArray ранее указывал на массив, ключ которого в словаре – «K», и все же текущий firstLetter будет «P», уже существующим в качестве ключа, будет добавлено имя (начинающееся с буквы «P») к массиву имен, начинающихся с 'k'. Там большой вопрос.

3) Jassie добавляется к разному массиву к jassie в результате разницы в случае (в верхнем и нижнем регистре «k» обрабатываются по-разному).

Таким образом, в качестве огромного улучшения для ответа Джозефа точка № 2 является критической, вот более точная реализация для будущих пользователей:

 -(NSDictionary*)indexArrayByName:(NSArray*)people { NSMutableDictionary *anIndexedDict = [[NSMutableDictionary alloc] init]; NSMutableArray *currentArray = nil; NSRange aRange = NSMakeRange(0, 1); NSString *firstLetter; for(Person *aPerson in people) { if(aPerson.name.length) firstLetter = [[aPerson.name substringWithRange:aRange] uppercaseString]; else firstLetter = @"noName";//find own way to identify these if(![anIndexedDict.allKeys containsObject:firstLetter]) { currentArray = [NSMutableArray array]; anIndexedDict[firstLetter] = currentArray; } currentArray = anIndexedDict[firstLetter]; [currentArray addObject:aPerson]; } return anIndexedDict; } 

Другие улучшения могут быть добавлены, например, удаление ведущих пробелов и т. Д., Но я просто подумал, что я упоминал основные проблемы. Я испытал ответ Джозефа на эти вопросы, а затем мой, чтобы убедиться, что они устранены :). Кредит Джозефу для основной идеи. Приветствия.

  • определять URL-адреса в UILabel
  • Переход на один вид UIView
  • UITableView внутри UITableView?
  • UITableView пространство между строками и разделами
  • Как ускорить идентификацию одного крана по двойному нажатию?
  • Как сохранить источник данных UITableView, упорядоченный в ответ на перемещение пользователей вокруг?
  • Как разрешить «Представления статической таблицы действительны только при встраивании в экземпляры UITableViewController» при создании приложения?
  • Как добавить изображение в заголовок раздела UITableView с помощью swift?
  • iOS UITableview скрытая разделительная линия
  • iOS - другой поток должен отправить reloadData в mainthread
  • Получите IndexPath из подкласса UITableViewCell в Swift
  • Interesting Posts

    Группированный индекс UITableView & Section

    Monotouch / Наложение привязки Xamarin

    Как я могу обнаружить взаимодействие где-либо вне UIControl, неинвазивно?

    Пользовательские проблемы с клавиатурой webview

    Определение метода для «…:» не найдено

    (ios9) Интервал HangTracer равен 0, вызывая 1 сек, используя Contact Framework

    ios затухает всплеск экрана (iphone 5)

    Использовать uicollectionview внутри uitableviewcell

    РазделIndexTitles для UICollectionView

    Статический UITableViewCell backgroundColor всегда белый на iPad

    Как указать идентификатор приложения при загрузке в iTunesConnect с помощью командной строки

    Как установить UIActivityIndicatorView при загрузке UITableViewCell

    Сколько версий вернулось для тестирования приложений iOS?

    Получить высоту представления, основанную на ограничениях по границам после выполнения Swift

    Как очистить кеш-память приложения IOS (загруженные изображения)

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.