Я бы имел один массив на штат / провинцию / и т. Д. И поместил бы эти массивы в словарь, используя состояние в качестве ключа.Затем другой массив, содержащий все ключи состояния.Создайте / обновите массив ключей состояния, используя keysSortedByValueUsingSelector при добавлении или удалении словаря.И такой код для реализации делегатов таблицы ...
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [stateKeyArray count];
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [stateKeyArray objectAtIndex:section];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSString* stateKey = [stateKeyArray objectAtIndex:section];
return [[dataDict objectForKey:stateKey] count];
}
EDIT : Эти массивы и словари могут быть объявлены так:
// key=state (an NSString), obj=NSMutableArray of AddressRecord objects
NSMutableDictionary* dataDict;
// sorted array of state keys (NSString)
NSMutableArray* stateKeyArray;
Toдобавить новую запись адреса, что-то вроде этого должно сделать это.Вам нужно что-то подобное, чтобы удалить адрес, но у вас должно быть достаточно, чтобы понять это.
-(void)addAddress:(AddressRecord* addr) {
NSMutableArray* stateArray = [dataDict objectForKey:addr.state];
if (stateArray==nil) {
// adding a new state
stateArray = [NSMutableArray new];
[dataDict setObject:stateArray forKey:addr.state]; // add state array to dict
[stateArray release];
// update array of state keys (assuming they are NSString)
self.stateKeyArray = [dataDict keysSortedByValueUsingSelector:@selector(localizedCompare:)];
}
[stateArray addObject:addr]; // add address to state array
}