#objective-c #nsuserdefaults
#objective-c #nsuserdefaults
Вопрос:
Я новичок в Objective C, при выполнении моего назначения я попытался сохранить объект в NSUserDefaults, объект создан успешно, и после повторного открытия объекта значение переменной экземпляра BOOL изменяется с 0 на 1 для всех объектов.
Метод протокола, который выполняет оценку при создании задачи..
-(void)didAddTask:(Task *)task{
[self.taskObjects addObject:task];
NSMutableArray *arrayOfTaskObjects = [[[NSUserDefaults standardUserDefaults]arrayForKey:TASK_OBJECTS_KEY] mutableCopy];
NSLog(@"%@",arrayOfTaskObjects);
if (!arrayOfTaskObjects) {
arrayOfTaskObjects = [[NSMutableArray alloc]init];
}
[arrayOfTaskObjects addObject:[self taskObjectAsAPropertyList:task]];
[[NSUserDefaults standardUserDefaults] setObject:arrayOfTaskObjects forKey:TASK_OBJECTS_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
[self dismissViewControllerAnimated:YES completion:nil];
[self.tableView reloadData];
}
Метод создания списка свойств:
- (NSDictionary *)taskObjectAsAPropertyList:(Task *)taskObject{
NSDictionary *myDictionary = @{TASK_TITLE:taskObject.taskTitle,
TASK_DESCRIPTION:taskObject.taskDescription,
TASK_DATE:taskObject.taskDate,
TASK_COMPLETION:@(taskObject.isTaskCompleted)};
NSLog(@"Task Completion: %@", myDictionary[TASK_COMPLETION]);
return myDictionary;
}
Редактировать:
Код класса Task:
@implementation Task
-(id)init{
self = [self initWithData:nil];
return self;
}
-(id)initWithData:(NSDictionary*)data{
self = [super init];
if (self) {
self.taskTitle = data[TASK_TITLE];
self.taskDescription = data[TASK_DESCRIPTION];
self.taskDate = data[TASK_DATE];
self.isTaskCompleted = data[TASK_COMPLETION];
}
return self;
}
@end
Правка 2:
NSMutableArray * demoArray = [[[NSUserDefaults standardUserDefaults]arrayForKey:TASK_OBJECTS_KEY]mutableCopy];
NSLog(@"Retrievd Array From NSUserDefaults : %@", demoArray);
for(NSDictionary *dic in demoArray){
Task *myTask = [[Task alloc]init];
myTask.taskTitle = dic[TASK_TITLE];
if (dic[TASK_COMPLETION]==0) {
myTask.isTaskCompleted = NO;
}
else{
myTask.isTaskCompleted = YES;
}
//myTask.isTaskCompleted = dic[TASK_COMPLETION];
myTask.taskDescription = dic[TASK_DESCRIPTION];
myTask.taskDate = dic[TASK_DATE];
[self.taskObjects addObject:myTask];
}
Комментарии:
1. покажите код установки значений в объекте task .
2. @Jeyamahesan теперь видишь
3. В коде нет ничего неправильного. все работает так, как ожидалось. проверьте код, устанавливаете ли вы логическое значение как true где-то в другом месте.
4. Убедитесь, что вы проверяете,
[yourObject boolValue]
и не толькоyourObject
, если вы проверяете логические значения с помощьюif
инструкции.5. @phi Смотрите мою правку.
Ответ №1:
Убедитесь, что данные, которые вы собираетесь сохранить в NSUserDefaults, совпадают с теми, которые вы ввели, используя инструкцию NSLog.
Комментарии:
1. Я проверил, что введенные или полученные данные верны. Это вызвано какой-то другой проблемой, пожалуйста, смотрите мой код.
2. Ооо, это проблема в вашем NSDictionary… Оценивайте это шаг за шагом.