【问题标题】:Possible ways to export IPhone addressbook db导出 iPhone 地址簿数据库的可能方法
【发布时间】:2011-12-07 06:48:43
【问题描述】:

我想将 iPhone 的 AddressBook.sqlitedb 导出到我的 iPhone 应用程序中。

我在网上搜索过,但似乎一切都在“ABAddressBook”上进行迭代

但我想知道是否可以通过编程方式将 iPhone 的 AddressBook.sqlitedb 导出到我的 iPhone 应用程序中?

请告诉我任何有价值的cmets!!!

感谢您的帮助.....

【问题讨论】:

    标签: iphone objective-c ios4 addressbook


    【解决方案1】:

    您必须获取每一个值,然后将其插入到您的数据库中。

    这是我将 iphone 通讯录放入应用程序 Db 的代码。

    只要在你想获取 iphone 通讯录的地方调用下面的方法,但我建议你在 delegat.m 方法中调用这个方法 - 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]);
        }
    
    }
    
    }
    

    希望这会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多