是否可以从本机应用程序打开addContactScreen?

时间:2011-06-06 08:03:39

标签: ios4 addressbook contact-form

我想复制像iPhone一样的屏幕添加联系人。但我不想在默认电话簿中添加联系人,而是想在我的应用程序中使用详细信息。是否可以打开默认添加新的联系人屏幕并获取所有数据?如果是,那怎么样?一个简单的代码片段将非常有用。这是添加联系人屏幕的图像,以便更好地理解我的问题

Add New Contact

1 个答案:

答案 0 :(得分:1)

您可以尝试将联系人添加到地址簿,提取数据,然后将其从地址簿中删除。这是一个相当简单的过程。

我使用此功能将所有人数据保存到我的应用中的核心数据。然后从地址簿中删除此人。

  +(void)savePersonDetails:(Person*)person{

ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef ref = ABAddressBookGetPersonWithRecordID(addressBook,[person.ID intValue]);
ABMutableMultiValueRef multiPhones = ABRecordCopyValue(ref, kABPersonPhoneProperty);

for (CFIndex i = 0; i < ABMultiValueGetCount(multiPhones); i++) {
    NSString *phoneNumber  = (NSString*)ABMultiValueCopyValueAtIndex(multiPhones, i);
    CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(multiPhones, i);
    NSString *phoneNumberLabel =(NSString*) ABAddressBookCopyLocalizedLabel(locLabel);
    CFRelease(locLabel);


    Phone *phone =(Phone*)[NSEntityDescription insertNewObjectForEntityForName:@"Phone" inManagedObjectContext:person.managedObjectContext];
    phone.number =  phoneNumber;
    phone.label = phoneNumberLabel;
    phone.person = person;
    [person addPhonesObject:phone];

    [person release];
    CFRelease(phoneNumber);
    CFRelease(phoneNumberLabel);

}

  CFRelease(multiPhones);   


   ABMutableMultiValueRef multiEmail = ABRecordCopyValue(ref, kABPersonEmailProperty);

for (CFIndex i = 0; i < ABMultiValueGetCount(multiEmail); i++) {
    NSString *mail = (NSString*)ABMultiValueCopyValueAtIndex(multiEmail, i);
    CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(multiEmail, i);
    NSString *mailLabel =(NSString*) ABAddressBookCopyLocalizedLabel(locLabel);

    Mail *mailEntity =(Mail*)[NSEntityDescription insertNewObjectForEntityForName:@"Mail" inManagedObjectContext:person.managedObjectContext];
    mailEntity.mail = mail;
    mailEntity.label = mailLabel;
    mailEntity.person = person;
    [person addMailsObject:mailEntity];

    CFRelease(locLabel); 
    [mail release];
    [mailLabel release];
}
    CFRelease(multiEmail);


    ABMultiValueRef streets = ABRecordCopyValue(ref, kABPersonAddressProperty);
for (CFIndex j = 0; j<ABMultiValueGetCount(streets);j++){
    CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(streets, j);
    CFStringRef typeTmp = ABMultiValueCopyLabelAtIndex(streets, j);
    CFStringRef lbl = ABAddressBookCopyLocalizedLabel(typeTmp);
    NSString *street = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressStreetKey) copy];
    NSString *city = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressCityKey) copy];
    NSString *state = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressStateKey) copy];
    NSString *zip = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressZIPKey) copy];
    NSString *country = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressCountryKey) copy];





    Address *addressEntity =(Address*)[NSEntityDescription    insertNewObjectForEntityForName:@"Address"    inManagedObjectContext:person.managedObjectContext];
    addressEntity.label = (NSString*)lbl;
    addressEntity.street = street;
    addressEntity.city = city;
    addressEntity.state = state;
    addressEntity.zip = zip;
    addressEntity.country = country;


    [street release];
    [city release];
    [state release];
    [zip release];
    [country release];
    CFRelease(dict);
    CFRelease(lbl);
    CFRelease(typeTmp);
    addressEntity.person = person;
    [person addAddressesObject:addressEntity];
}
CFRelease(streets);



ABMutableMultiValueRef multiURL = ABRecordCopyValue(ref, kABPersonURLProperty);

for (CFIndex i = 0; i < ABMultiValueGetCount(multiURL); i++) {

    NSString *url = (NSString*)ABMultiValueCopyValueAtIndex(multiURL, i);
    CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(multiPhones, i);
    NSString *urlLabel =(NSString*) ABAddressBookCopyLocalizedLabel(locLabel);

    Url *urlEntity =(Url*)[NSEntityDescription   insertNewObjectForEntityForName:@"Url" inManagedObjectContext:person.managedObjectContext];
    urlEntity.url = url;
    urlEntity.label = urlLabel;
    urlEntity.person = person;
    [person addUrlsObject:urlEntity];



    CFRelease(locLabel);
    [urlLabel release];
    [url release];
}
    CFRelease(multiURL);


ABAddressBookRemoveRecord(addressBook, ref, nil);
ABAddressBookSave(addressBook, nil);

CFRelease(addressBook);

if (![person.managedObjectContext save:&error]) {
    // Update to handle the error appropriately.
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    exit(-1);  // Fail
}
  }