ios - 无法将对象保存到 CoreData

标签 ios core-data

我有一个数据模型,其实体为 HYUser,属性为 firstNamelastNameemail性别电话。当我检查我的 .sqlite 数据库时,那里什么也没有。我已经附上了应该保存我的对象的整个按钮操作。

- (IBAction)btnUserDataSave:(id)sender {
NSEntityDescription * entityDescription = [NSEntityDescription entityForName:@"HYUser" inManagedObjectContext:context];
NSManagedObject *newUser = [[NSManagedObject alloc]initWithEntity:entityDescription insertIntoManagedObjectContext:context];
NSString *gender = NULL;
NSError *error = nil;

[newUser setValue:self.txtfFirstName.text forKey:@"firstName"];
[newUser setValue:self.txtfLastName.text forKey:@"lastName"];
[newUser setValue:self.txtfPhoneNumber.text forKey:@"phone"];
[newUser setValue:self.txtfUserEmail.text forKey:@"email"];

if (self.segmentControlGender.selectedSegmentIndex == 0) {
    gender = @"Male";
}else if(self.segmentControlGender.selectedSegmentIndex == 1){
    gender = @"Female";
}else{
    NSLog(@"ERROR in gender saving");
}
[newUser setValue:gender forKey:@"gender"];

if ([self.txtfFirstName.text  isEqual: @""] || [self.txtfLastName.text  isEqual: @""] || [self.txtfPhoneNumber.text  isEqual: @""] || [self.txtfUserEmail.text  isEqual: @""]) {
    UIAlertController* errorPrompt = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Required Fields", @"Required Fields")
                                                                         message:NSLocalizedString(@"All fields are required to complete Sign-up. ", nil)
                                                                  preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK",nil)
                                                       style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

                                                       }];
    [errorPrompt addAction:okAction];
    [self presentViewController:errorPrompt animated:YES completion:NULL];

}else{
    if(![context save:&error]) {
        self.labelStatus.text = @"Error";
        NSLog(@"%@, %@", error, error.localizedDescription);
    }else{
        [context save:&error];
        self.labelStatus.text = @"Saved";

    }
}
}

最佳答案

我解决了这个问题,看起来它与我尝试保存对象的方式有关。以下是我注册新用户的完整代码。

- (IBAction)btnUserDataSave:(id)sender {


HYUser* signUpUserObject = [NSEntityDescription insertNewObjectForEntityForName:@"HYUser" inManagedObjectContext:context];

NSString *gender = nil;
NSError *error = nil;

if ([self.txtfFirstName.text  isEqual: @""] || [self.txtfLastName.text  isEqual: @""] || [self.txtfPhoneNumber.text  isEqual: @""] || [self.txtfUserEmail.text  isEqual: @""]) {
    UIAlertController* errorPrompt = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Required Fields", @"Required Fields")
                                                                         message:NSLocalizedString(@"All fields are required to complete Sign-up. ", nil)
                                                                  preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK",nil)
                                                       style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

                                                       }];
    [errorPrompt addAction:okAction];
    [self presentViewController:errorPrompt animated:YES completion:NULL];

}
else {


    self.labelStatus.text = @"Saved";
    [signUpUserObject setValue:self.txtfFirstName.text forKey:@"firstName"];
    [signUpUserObject setValue:self.txtfLastName.text forKey:@"lastName"];
    [signUpUserObject setValue:self.txtfPhoneNumber.text forKey:@"phone"];
    [signUpUserObject setValue:self.txtfUserEmail.text forKey:@"email"];

    gender =  self.segmentControlGender.selectedSegmentIndex == 0 ? @"Male" : @"Female";

    [signUpUserObject setValue:gender forKey:@"gender"];

    if(![context save:&error]) {
        self.labelStatus.text = @"Error";
        NSLog(@"%@, %@", error, error.localizedDescription);
    }
    else {
        UIAlertController* errorPrompt = [UIAlertController alertControllerWithTitle:@"HairYourWay"
                                                                             message:NSLocalizedString(@"STR_NEW_USER_SIGN_UP_SUCCEEDED", @"Success")
                                                                      preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction* okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK",nil)
                                                           style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
                                                               [self.navigationController popViewControllerAnimated:YES];
                                                           }];
        [errorPrompt addAction:okAction];
        [self presentViewController:errorPrompt animated:YES completion:NULL];

    }
}
}

关于ios - 无法将对象保存到 CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32660228/

相关文章:

xcode - 在 OS X 上删除 CoreData 存储?

ios - 在 Core Data 中存储 UIColor 对象

ios - 清理后,managedObjectContext 为 nil 并导致 fatal error : unexpectedly found nil while unwrapping an optional value

ios - 使用 Swift 最佳实践解析 PFUser 子类注册

ios - 无法在 uiimageview swift 中将 map 设置为图像

objective-c - 如何将依赖项注入(inject) iOS View Controller ?

ios - AVCaptureVideoPreviewLayer 在 iOS 中添加覆盖和捕获照片

cocoa - NSManagedObjectContext 的 userInfo 属性如何工作?

ios - 核心数据 changedValues 是否忽略二进制数据和转换后的属性?

javascript - PhoneGap 应用程序无法与 Google Analytics 一起使用