Possible ways to export IPhone addressbook db

ⅰ亾dé卋堺 提交于 2019-12-12 08:56:57

问题


I want to export IPhone's AddressBook.sqlitedb into my IPhone application.

I have searched around the net but everything seems to iterate over the "ABAddressBook"

but i want to know that is it possible to export IPhone's AddressBook.sqlitedb into my IPhone application programmatically?

Please let me know any valuable comments!!!

Thanks for your help.....


回答1:


you have to fetch every single value and then insert it into your DB.

Here is the code through which i got iphone address book into my application's Db.

just call the below method where ever you want to get iphone Address Book but i'll suggest you to call this methos in delegat.m method- DidFinishLanching:

-(void)fetchRecordsFromAddressBook
{
    ABAddressBookRef addressBook = ABAddressBookCreate();
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

//NSArray *addresses = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

//[arrayContacts removeAllObjects];

[self emptyDataContext];

for (int i = 0; i < nPeople; i++)
{


    ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);


    //////////////////  get first name  ///////////////////

    CFStringRef firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);

    CFStringRef lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty);

    CFStringRef nickName = ABRecordCopyValue(ref, kABPersonNicknameProperty);

    CFStringRef middleName = ABRecordCopyValue(ref, kABPersonMiddleNameProperty);


    //////////////////  get image  ///////////////////

//      ABMultiValueRef ContactImage = (ABMultiValueRef)     ABRecordCopyValue(ref,kABPersonImageFormatThumbnail);


    NSData *data=nil;

//  NSLog(@"Image Testing is : %@",ref);

    if(ABPersonHasImageData(ref))
    {
        data = [(NSData *) ABPersonCopyImageData(ref) autorelease];
        if(data)
        {
        //  NSLog(@"Im Testing is : %@",data);

            //image = [[UIImage alloc] initWithData:data];
        }
    }

//      NSLog(@"Im agte is : %@",ContactImage);
//      NSLog(@" Name is : %@",firstName);



    //////////////////  get email  ///////////////////

    ABMultiValueRef emails = (ABMultiValueRef) ABRecordCopyValue(ref, kABPersonEmailProperty);

    NSString *emailID=@"";

    if(ABMultiValueGetCount(emails)>=1)
    {
        emailID = (NSString *)ABMultiValueCopyValueAtIndex(emails,0);
    }


    //////////////////  get phone number  ///////////////////

    ABMultiValueRef phones = (ABMultiValueRef) ABRecordCopyValue(ref, kABPersonPhoneProperty);

    NSString *phone=@"";

    NSString *homeNumber = @"";

    NSString *worknumber = @"";

    if(ABMultiValueGetCount(phones)>=1)
    {
        //int ph = [ABMultiValueCopyValueAtIndex(phones, 0) intValue];
        phone = (NSString *)ABMultiValueCopyValueAtIndex(phones,0);
    }
//  NSLog(@"%@",(NSString*)phone);  


    if(ABMultiValueGetCount(phones)>=2)
    {
        homeNumber = (NSString *)ABMultiValueCopyValueAtIndex(phones,1);
    }

    if(ABMultiValueGetCount(phones)>=3)
    {
        worknumber = (NSString *)ABMultiValueCopyValueAtIndex(phones,2);
    }


    NSMutableArray *arrayContacts = [[NSMutableArray alloc] init ];


    /////////////////////////////          insert into array               ////////////////////////////

    arrayContacts = [CoreDataAPIMethods getObjectsFromContext:@"AllContactData" :@"Index" :NO :self.managedObjectContext];

    ////////////////////////////         insert Index         ///////////////////////////////
    int NewEntryID;

    if ([arrayContacts count] > 0) 
    {
        AllContactData * Contacdata = [arrayContacts objectAtIndex:0];

        NewEntryID = [Contacdata.Index intValue] +1;

    }
    else 
    {
        NewEntryID = 1;
    }

    NSString *capitalisedSentence = 
    [(NSString *)firstName stringByReplacingCharactersInRange:NSMakeRange(0,1)  
                                        withString:[[(NSString *)firstName  substringToIndex:1] capitalizedString]];

    AllContactData *Contactitem=(AllContactData *)[NSEntityDescription insertNewObjectForEntityForName:@"AllContactData" inManagedObjectContext:self.managedObjectContext];

//      NSLog(@"%@",capitalisedSentence);

    Contactitem.Name = capitalisedSentence;

    Contactitem.LastName = (NSString*)lastName;

    Contactitem.NickName = (NSString*)nickName;

    Contactitem.MiddleName = (NSString*)middleName;

    Contactitem.Email=(NSString*)emailID;

    phone = [phone stringByReplacingOccurrencesOfString:@"(" withString:@""];

    phone = [phone stringByReplacingOccurrencesOfString:@")" withString:@""];

    phone = [phone stringByReplacingOccurrencesOfString:@"+" withString:@""];

    phone = [phone stringByReplacingOccurrencesOfString:@" " withString:@""];

    phone = [phone stringByReplacingOccurrencesOfString:@"-" withString:@""];

    NSLog(@"The Replacing Stinr is : %@", phone);

    Contactitem.PhoneNumber=(NSString*)phone;

    Contactitem.HomeNumber=(NSString*)homeNumber;

    Contactitem.WorkNumber=(NSString*)worknumber;

    Contactitem.Index = [NSNumber numberWithInt:NewEntryID];

    Contactitem.Image = data;

//      NSLog(@"Image in databse  is : %@",(NSData *)ContactImage);

    if(firstName!=nil)
    {
        CFRelease(firstName);
    }
    CFRelease(ref);

}
CFRelease(allPeople);


/////////////////////////////         save entries          ////////////////////////////

NSError *error;
if (![managedObjectContext save:&error]) {
    // Handle the error...
}


}



-(void)emptyDataContext
{

self.managedObjectContext = [(Dial_Up_AppAppDelegate*)[UIApplication sharedApplication].delegate managedObjectContext];

NSLog(@"managedObjectContext=%@",self.managedObjectContext);
// Get all counties, It's the top level object and the reference cascade deletion downward
NSMutableArray* mutableFetchResults = [CoreDataAPIMethods getObjectsFromContext:@"AllContactData" :@"Name" :YES :self.managedObjectContext];
// Delete all Counties
for (int i = 0; i < [mutableFetchResults count]; i++) {
    [managedObjectContext deleteObject:[mutableFetchResults objectAtIndex:i]];
}
//[mutableFetchResults release];
// Update the data model effectivly removing the objects we removed above.
NSError *error;
if([mutableFetchResults count] > 0)
{

    if (![managedObjectContext save:&error]) {
        // Handle the error.
        //NSLog([error domain]);
    }

}

}

Hope this will help you.



来源:https://stackoverflow.com/questions/8411442/possible-ways-to-export-iphone-addressbook-db

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!