Если ваша структура данных становится слишком сложной, вы должны рассмотреть другой способ хранения.
Возможно, вам не помешает использовать NSDictionary
, где ключом является имя закладки, а значением - адрес закладки.
{
"Google" = "http://google.com"
}
Когда вы загружаете ваш источник данных, вы должны получить словарь из NSUserDefaults
self.bookmarks = [[userDefaults dictionaryForKey:URDictionaryKey] mutableCopy];
Чтобы сохранить вашу таблицу в порядке, вы можете создать NSArray
сортированных ключей словарей.
self.bookmarkKeys = [[self.bookmarks allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
В качестве методов источника данных вы используете что-то вроде
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
return [self.bookmarkKeys count];
}
Для конфигурации ячейки вы используете что-то вроде:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
NSString *title = [self.bookmarkKeys objectAtIndex:indexPath.row];
cell.textLabel.text = title;
cell.detailTextLabel.text = [self.bookmarks objectForKey:title];
return cell;
}
Если пользователь удаляет строку в таблице, вы должны сделать что-то вроде:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSString *key = [self.bookmarkKeys objectAtIndex:indexPath.row];
[self.bookmarks removeObjectForKey:key];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.bookmarks forKey:URDictionaryKey];
[defaults synchronize];
}
}
Обновление
Вам нужно будет использовать NSMutableDictionary , это подкласс NSDictionary , так что просмотр документов для обоих поможет вашему пониманию.
В этом случае вы бы начали с пустого изменяемого словаря
self.bookmarks = [NSMutableDictionary dictionary];
Затем, когда пользователь добавляет закладку, вы добавляете ее в словарь, используя имя в качестве key
и назначение в качестве value
[self.bookmarks setObject:@"http://google.com" forKey:@"Google"];