检索数据时 NSUserDefaults 中的问题,值从“0”更改为“1”

Issue in NSUserDefaults while retrieving data, value change from "0" to "1"

我是 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;
}

编辑: 任务代码 Class:

@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];

}

确保您要保存在 NSUserDefaults 中的数据与您通过使用 NSLog 语句输入的数据相同。