Вы можете создавать вложенные массивы вместо вложенных словарей. И создайте еще один массив, который содержит имя состояния.
- Root (array)
- Texas (array)
- Location1 (dictionary)
- TitleOfLocation (string)
- Address (string)
- ...
- Florida (array)
- Location1 (dictionary)
- ...
- Location2 (dictionary)
- ...
// and
- StateNames (array)
- Texas (string)
- Florida (string)
Для удобства вы можете поместить эти два массива в единый NSDictionary. Я не делал этого в моем примере.
И потому NSArray, NSDictionary и NSString все подтвердить в протоколе NSCoding вы можете написать этот словарь на диск с WriteToFile: атомарно:
Я написал некоторые примеры кода для вас, потому что я думаю, что решение является довольно простым, но трудно для описания словами.
#define kKeyDescription @"kKeyDescription"
#define kKeyAddress @"kKeyAddress"
#define kKeyCity @"kKeyCity"
#define kKeyState @"kKeyState"
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *root = [NSMutableArray array];
NSMutableArray *sectionTitle = [NSMutableArray array];
NSMutableArray *florida = [NSMutableArray array];
[root addObject:florida];
[sectionTitle addObject:@"Florida"];
NSMutableArray *texas = [NSMutableArray array];
[root addObject:texas];
[sectionTitle addObject:@"Texas"];
NSDictionary *location1 = [NSDictionary dictionaryWithObjectsAndKeys:
@"My favorite pizza place", kKeyDescription,
@"5106 Grace Drive", kKeyAddress,
@"Miami", kKeyCity,
@"Florida", kKeyState,
nil];
[florida addObject:location1];
NSDictionary *location2 = [NSDictionary dictionaryWithObjectsAndKeys:
@"Home", kKeyDescription,
@"1234 Foobar Street", kKeyAddress,
@"Fort Lauderdale", kKeyCity,
@"Florida", kKeyState,
nil];
[florida addObject:location2];
NSDictionary *location3 = [NSDictionary dictionaryWithObjectsAndKeys:
@"Franks Workplace", kKeyDescription,
@"9101 Baz Avenue", kKeyAddress,
@"Houston", kKeyCity,
@"Texas", kKeyState,
nil];
[texas addObject:location3];
data = [root retain];
sectionData = [sectionTitle retain];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [self.data count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [self.sectionData objectAtIndex:section];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [[self.data objectAtIndex:section] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellID = @"MyCellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID] autorelease];
}
NSDictionary *object = [[self.data objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
// < This is the array for the selected state >
cell.textLabel.text = [object valueForKey:kKeyDescription];
cell.detailTextLabel.text = [object valueForKey:kKeyAddress];
return cell;
}
Я уверен, что вы можете просто вставить словари в код. то есть. '[stateNameDictionary setObject: LocationDictionary forKey: @" TitleOfLocation "];' – mackross