Итак, у меня есть приложение, которое я создаю, включая контрольный список из 100 элементов.Загрузить/Сохранить NSUserDefaults Array - Bools?
Я хочу создать массив из bools
, который указывает, отмечен ли элемент «отмечен», а затем сохраните его на устройстве с помощью NSUserDefaults
, чтобы он мог загружаться каждый раз, когда приложение запускается.
Я понимаю, читая вокруг, что вы не можете хранить BOOL значения в NSArrays поэтому я выбрал из изменяемого массива, который держит струну @"YES"
и @"NO"
... Я почти уверен, что это плохой способ сделать это, но я из идей.
Я создаю мой массив так:
boolArrayOfCheckList = [[NSMutableArray alloc] initWithCapacity:100];
for (NSInteger i = 0; i < 100; i++){
[boolArrayOfCheckList addObject:[NSString stringWithFormat:@"NO"]];
}
Когда элемент проверяется с помощью IBAction
, он обновляет массив в индекс, связанный с кнопкой (это, кажется, добавление в массив вместо того, чтобы заменить объект в указанном индекс :(...):
[boolArrayOfCheckList insertObject:[NSString stringWithFormat:@"YES"] atIndex:0];
Затем сохранить массив как это:
[[NSUserDefaults standardUserDefaults] setObject:boolArrayOfCheckList forKey:@"myBoolArray"];
Когда я перезагрузить приложение, то ViewdidLoad
загружает ключ:
NSMutableArray *boolArrayOfCheckList = (NSMutableArray *)[[NSUserDefaults standardUserDefaults] objectForKey:@"myBoolArray"];
и сравнивая элемент, как это и загружая пункты проверки/снимите флажок соответственно:
if([[boolArrayOfCheckList objectAtIndex:0] isEqualToString:@"YES"]) ... //do this
Но я получаю смешные результаты, когда я добавляю строки, и у меня возникают проблемы с загрузкой данных снова.
Должен быть более эффективный способ хранения контрольного списка в массиве, который может быть соответствующим образом сохранен/обновлен. Как это может быть сделано?
спасибо.
Update
Просто заметил, что я вставив вместо замены, так что объясняет массив становится все больше, вместо того, чтобы заменить объект в определенный индекс. Теперь это сделать:
[boolArrayOfCheckList replaceObjectAtIndex:1 withObject:[NSString stringWithFormat:@"YES"]];
Лучше всего использовать 'NSNumber' обернуть' BOOL's для 'NSArray'. Однако использование массива для проверки того, был ли элемент проверен или нет, подвержен ошибкам; единственное, что связано с элементами в контрольном списке, - это их позиция в массиве. Использование словаря или добавление 'BOOL' в качестве свойства вашего элемента, вероятно, было бы лучше. – stefandouganhyde