Проблема в NSUserDefaults при получении данных, изменение значения с «0» на «1»

#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… Оценивайте это шаг за шагом.