Как сохранить значение пути индекса в представлении таблицы в iPhone? - PullRequest
1 голос
/ 27 января 2011

Я создал табличное представление и отобразил данные.Когда я щелкаю данные в табличном представлении, я ставлю метку аксессуара (используя UITableViewCellAccessoryCheckmark, Like, Check Mark).Теперь я хочу сохранить состояние позиции индекса.Потому что, когда я перехожу к другому классу, а затем возвращаюсь к табличному виду, будет отображаться предыдущее состояние (знак принадлежности).ТАК, как я могу сохранить состояние, что означает сохранение или сохранение значения indexpath (без использования метода AppDelegate), так как я могу достичь этого?

Вот мой пример кода:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

 if (newRow != oldRow)
{
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:
                                indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:
                                checkedData];
    oldCell.accessoryType = UITableViewCellAccessoryNone;

    checkedData = indexPath;

}
if (newRow == oldRow) {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    } else {

        // cell.accessoryType = UITableViewCellAccessoryNone;
    }
    checkedData = indexPath;
}
 }

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

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if(checkedData == indexPath) // Doesn't works
      {

    cell.accessoryType = UITableViewCellAccessoryCheckmark;
     }

Пожалуйста, помогите мне.

Спасибо

1 Ответ

1 голос
/ 27 января 2011

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

Что вы хотите сделать, это A) сохранить это значение в постоянном хранилище или B) создать постоянную переменную.

A) Установить объект в хранилище (в этом случае NSUserDefaults, потому что это очень просто:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
prefs = [setObject:checkedData forKey:@"checkedData"];

Затем, чтобы проверить объект так, как вы хотели, вы можете сделать это:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
<b>if([[prefs objectForKey:@"checkedData"] compare: indexPath]== NSOrderedSame)</b>{<br>cell.AccessoryType = UITableViewCellAccessoryCheckMark;<br>}

B) Сохранить объект как постоянную переменную:

В вашем .h:

@interface ... : ...{

}

@property(nonatomic, retain) NSIndexPath *checkedData;

@end

В .м:

@implementation 
@synthesize checkedData;
@end

Теперь, чтобы установить эту переменную:

self.checkedData = indexPath;

Для проверки:

<b>if([self.checkedData compare:indexPath] == NSOrderedSame)</b>{<br>cell.accessoryType = UITableViewCellAccessoryTypeCheckMark;<br>}

Там действительно не будет большой разницы, вам решать, чего вы хотите. Если вы используете NSUserDefaults, имейте в виду, что данные сохраняются при запуске. Если вы не хотите этого, но хотите использовать его, вы должны очистить объект при закрытии приложения: [prefs removeObjectForKey:@"checkedData"];

Счастливого кодирования,

Зейн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...