Имя NSUserDefaults автоматически - PullRequest
0 голосов
/ 05 марта 2012

Пожалуйста, извините, потому что это немного сложно объяснить. Я буду стараться изо всех сил!

Итак, я создаю закладки. Я дошел до того, что перенес URL-адрес WebView в таблицу, где вы можете установить и отобразить его. Это хорошо работает для одной закладки. Вот как выглядит код:

//Gets Page (currentAddress is the address of the webview passed to the bookmarks)
NSString *address = [defaults objectForKey:@"currentAddress"];

//Adds Set URL To Defaults (defaults is the name for the NSUserDefaults declaration)
[defaults setObject:address forKey:@"savedAddress1"];

//Adds To Array (favorites is the mutable array that the table displays)
[favorites addObject:address];

//Syncs Defaults
[defaults synchronize];

//Animate Back To Home Screen
[self dismissModalViewControllerAnimated:YES];

Однако, когда вы добавляете новые закладки, они просто перезаписывают друг друга. Как вы можете назвать их последовательно, чтобы они не просто переписывались друг с другом автоматически? Помните, что мне нужно знать, как получить индекс для удаления, а также проверить, равен ли он нулю.

Так что, пожалуйста, если у вас есть что-нибудь, что могло бы помочь мне в этой ситуации, было бы здорово. Я думал, возможно, использовать массив в NSUserDefaults для отслеживания, но опять же, я не знаю, и мне нужна ваша помощь!

Спасибо за ваше время!

- Jake

1 Ответ

1 голос
/ 05 марта 2012

Если ваша структура данных становится слишком сложной, вы должны рассмотреть другой способ хранения.

Возможно, вам не помешает использовать 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"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...