Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS核心数据:获取的对象多于保存的对象_Ios_Objective C_Core Data - Fatal编程技术网

iOS核心数据:获取的对象多于保存的对象

iOS核心数据:获取的对象多于保存的对象,ios,objective-c,core-data,Ios,Objective C,Core Data,我不熟悉核心数据,我正试图用它来拯救用户。但是,当我第一次创建用户时,它会插入用户。这似乎很顺利。它只被调用一次 -(void)insertUser: (User *) user{ [self userToModel:user]; NSError *error = nil; if(![context save:&error]){ NSLog(@"Unable to save managed object context"); } } -(

我不熟悉核心数据,我正试图用它来拯救用户。但是,当我第一次创建用户时,它会插入用户。这似乎很顺利。它只被调用一次

-(void)insertUser: (User *) user{
    [self userToModel:user];
    NSError *error = nil;
    if(![context save:&error]){
        NSLog(@"Unable to save managed object context");
    }
}

-(UserModel *)userToModel:(User *) user{
    UserModel *usermodel = [NSEntityDescription
                            insertNewObjectForEntityForName:@"UserModel"
                            inManagedObjectContext:context];

    [usermodel setValue:user.username forKey:@"username"];
    [usermodel setValue:user.password forKey:@"password"];
    [usermodel setValue:user.sessionid forKey:@"sessionid"];
    [usermodel setValue:[NSNumber numberWithBool:TRUE] forKey:@"selected"];
    [usermodel setValue:[NSNumber numberWithBool:user.beta] forKey:@"beta"];

    return usermodel;
}
接下来,我获取用户,它返回3个用户:2个完全相似的用户和一个nil模型

-(NSMutableArray *)getUsers{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"UserModel"
                                              inManagedObjectContext:context];
    NSError *error;
    [fetchRequest setEntity:entity];
    NSArray *usermodels= [context executeFetchRequest:fetchRequest error:&error];
    NSMutableArray *users = [[NSMutableArray alloc] init];
    for(UserModel *userModel in usermodels){
        User *user = [self userModelToUser:userModel];
        [users addObject:user];
    }
    return users;
}
UserModelToUser:

-(User *)userModelToUser:(UserModel *)usermodel{
    User *user = [[User alloc]initWithUsername:usermodel.username
                                      Password:usermodel.password
                                     CSRFToken:usermodel.csrftoken
                                     sessionid:usermodel.sessionid
                                          Beta:[usermodel.beta boolValue]
                                      Selected:[usermodel.selected boolValue]];
    return user;
}
选择用户

-(void)selectUser: (User *)userToSelect OldUser:(User *)oldSelectedUser{
    UserModel *oldSelectedUserModel = [self userToModel:oldSelectedUser];
    UserModel *newSelectedUsermodel = [self userToModel:userToSelect];
    [oldSelectedUserModel setValue:[NSNumber numberWithBool:FALSE] forKey:@"selected"];
    [newSelectedUsermodel setValue:[NSNumber numberWithBool:TRUE] forKey:@"selected"];

    NSError *saveError;
    if (![context save:&saveError]) {
        NSLog(@"Changing users failed %@", saveError);
    }
}

我已经尝试重新安装该应用程序,以确保没有旧用户仍然保存或任何东西。有人能帮我吗?

设置一个断点或向userToModel添加一个NSLog-验证它只被调用一次。这个方法是你调用InsertNewObjectForEntityForName的唯一地方吗?我已经这样做了,是的。你在userModelToUser中做什么?我将我的用户对象转换为数据库用户模型你能显示代码吗?如果userToModel只被调用一次,那么问题不在这里显示的代码中