ios - 尝试创建一个表单以将联系人添加到设备——我该如何处理空白字段?

标签 ios iphone objective-c null abaddressbook

我有一个简单的表单,现在只包含四个字段(我稍后会添加更多)

  • 名字
  • 姓氏
  • 家庭邮箱
  • 工作邮箱

我只想将具有值(value)的项目保存为新联系人。现在,如果我不输入值,那么在联系页面中该值为“NULL”。处理此问题的适当方法是什么?

这是我的代码

#pragma mark - Add New Contacts Methods

- (IBAction)savePublicContact:(UIBarButtonItem *)sender {        
    CFErrorRef  anError = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &anError);
    ABRecordRef person = ABPersonCreate();
    Person *personUserDefined = [self populatePersonToSave];

    ABRecordSetValue(person,kABPersonFirstNameProperty,(__bridge CFTypeRef)(personUserDefined.firstName),&anError);
    ABRecordSetValue(person,kABPersonLastNameProperty,(__bridge CFTypeRef)(personUserDefined.lastName),&anError);

    ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty);
    ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFTypeRef)(personUserDefined.homeEmail), (CFStringRef)@"Home Email", NULL);
    ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFTypeRef)(personUserDefined.workEmail), (CFStringRef)@"Work Email", NULL);
    ABRecordSetValue(person, kABPersonEmailProperty, emailMultiValue, &anError);

    ABAddressBookAddRecord(addressBook, person, &anError);

    if(ABAddressBookSave(addressBook, &anError)){
        UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Added Contact"
                                                               message:@"You successfully added a contact"
                                                              delegate:self
                                                     cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alertsuccess show];

    }else{
        UIAlertView *alertsuccess = [[UIAlertView alloc] initWithTitle:@"Contact Error"
                                                               message:(@"Contact was not able to be added")
                                                              delegate:self
                                                     cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alertsuccess show];
    }


}

- (Person *)populatePersonToSave
{
    Person *person = [[Person alloc] init];

    if([self.firstNameToSaveTextField.text length] > 0){
        person.firstName = self.firstNameToSaveTextField.text;
    }

    if([self.lastNameToSaveTextField.text length] > 0) {
        person.lastName = self.lastNameToSaveTextField.text;
    }

    if([self.workEmailToSaveTextField.text length] > 0){
        person.workEmail = self.workEmailToSaveTextField.text;
    }

    if([self.homeEmailToSaveTextField.text length] > 0){
        person.homeEmail = self.homeEmailToSaveTextField.text;
    }

    return person;
}

最佳答案

最好在将联系人添加到地址簿的地方检查空条件,这是因为每次您都在联系人列表中启动必填字段。如果您没有数据可在必填字段中输入,我们为什么要启动它或引用它。

最好使用修改后的代码:

if (personUserDefined.firstName) {
    ABRecordSetValue(person,kABPersonFirstNameProperty,(__bridge CFTypeRef)(personUserDefined.firstName),&anError);
}


if (personUserDefined.lastName) {
    ABRecordSetValue(person,kABPersonLastNameProperty,(__bridge CFTypeRef)(personUserDefined.lastName),&anError);
}

ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty);
if (personUserDefined.homeEmail) {
    ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFTypeRef)(personUserDefined.homeEmail), (CFStringRef)@"Home Email", NULL);
}

if (personUserDefined.workEmail) {
    ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFTypeRef)(personUserDefined.workEmail), (CFStringRef)@"Work Email", NULL);
}
ABRecordSetValue(person, kABPersonEmailProperty, emailMultiValue, &anError);
ABAddressBookAddRecord(addressBook, person, &anError);

以上代码为您提供了如何防止在地址簿中插入空值。请检查条件是否满足条件(我没有在系统上执行)。

关于ios - 尝试创建一个表单以将联系人添加到设备——我该如何处理空白字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20438008/

相关文章:

ios - 使用一个 UIWebView 加载具有不同按钮的多个 URL -- iOS Swift

iphone - 为什么我无法使用此代码从委托(delegate)获取上下文?

iphone - objective-c 中以^开头的对象是什么意思

ios - 如何以编程方式检查字符串的日期格式是否正确

iphone - 如何从我的应用程序将 zip 文件存储在 evernote 中

ios - 为什么我不能在 ViewController 中创建数组?

iphone - Read And then HTML 页面 +IOS

ios - 在 GameScene 上画一条简单的线

ios - 如何访问所有 NSLog 语句?

ios - 我想显示图表并比较它们