【问题标题】:Problems importing contacts in ABAddressBook to text file将 ABAddressBook 中的联系人导入文本文件时出现问题
【发布时间】:2013-08-06 08:03:17
【问题描述】:

我使用 Apple 的地址簿创建了一个简单的联系人应用程序,并使用以下代理 ABNewPersonViewControllerDelegate、ABPeoplePickerNavigationControllerDelegate 和 ABPersonViewControllerDelegate,它具有以下功能:创建、编辑和删除联系人。现在我想添加一个选项,通过该选项,我创建的所有联系人以及电话号码都将导入文本文件中。这是我的代码:

-(void)fetchContacts
{
    addressBooks =ABAddressBookCreate();
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBooks);
    for (CFIndex i = 0; i < CFArrayGetCount(people); i++)
    {
        person12 = CFArrayGetValueAtIndex(people, i);
        NSString *tweet=[[NSString stringWithFormat:@"%@",(__bridge_transfer NSString *)ABRecordCopyValue(person12, kABPersonFirstNameProperty)] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

        if(CFBridgingRelease(ABRecordCopyValue(person12,kABPersonLastNameProperty))!=NULL)
        {
            tweet=[tweet stringByAppendingString:@" "];
            tweet=[tweet stringByAppendingString:[[NSString stringWithFormat:@"%@",(__bridge_transfer NSString *)ABRecordCopyValue(person12, kABPersonLastNameProperty)] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];

        }
        if(CFBridgingRelease(ABRecordCopyValue(person12,kABPersonFirstNameProperty))!=NULL)
        {
            tweet=[tweet stringByAppendingString:@" ---> "];
            tweet=[tweet stringByAppendingString:[[NSString stringWithFormat:@"%@",(__bridge_transfer NSString *)ABRecordCopyValue(person12, kABPersonPhoneProperty)] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
        }
        NSLog(@"%@",tweet); 

        NSString* documentPlistPath = [[NSBundle mainBundle] pathForResource:@"Contacts" ofType:@"txt"];
            [tweet writeToFile:documentPlistPath atomically:NO  encoding:NSUTF8StringEncoding error:nil];

        NSLog(@"%@",documentPlistPath);
    }
    CFBridgingRelease(people);

}

我现在有两个问题:

1) 在 NSLog 上,推文包含所有值,但格式如下:FirstName LastName ---> ABMultiValueRef 0x6c26760 with 1 value(s) 0: $!!$ (0x6c26b60) - 电话号码 (0x6c26b80)

我需要这种格式的 FirstName LastName ---> PhoneNumber

2) Contact.txt 文件未填充。在 NSLog 路径是正确的。请指教这里有什么问题。

【问题讨论】:

    标签: ios objective-c abaddressbook


    【解决方案1】:

    1) 在这段代码的帮助下,我能够解决第一个问题

    ABMultiValueRef multi = ABRecordCopyValue(person12, kABPersonPhoneProperty);
                if(ABMultiValueGetCount(multi)!=0)
                {
                //For fetching multiple Phone Numbers
                for (int i=0; i < ABMultiValueGetCount(multi); i++) 
                    {
                temp = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(multi, i);
                    phoneNumbers=[phoneNumbers stringByAppendingString:[NSString stringWithFormat:@"%@/",temp]];
                    }
                 }
    

    2) 对于这个问题,我使用了 NSFile 管理器,我修改了代码以在 UIWebView 中输出。以下是一些主要功能,以防其他人需要。

    //For reading the file
    
    - (IBAction)readFileAction:(id)sender {
    
    
        //Test whether this file exists before we read it
        if([self.fileMgr fileExistsAtPath:self.file])
        {
    
            NSString *content = [[NSString alloc] initWithContentsOfFile:self.file usedEncoding:nil error:nil];
            [webview loadHTMLString:content baseURL:nil];
    
        }
        else 
        {
            NSString *content = @"Contact list is not generated yet, click on create to generate the contact list";
            [webview loadHTMLString:content baseURL:nil];
        }
    }
    
    - (IBAction)deleteFileAction:(id)sender {
    
        //Test whether this file exists now that we have tried to remove it
        if([self.fileMgr fileExistsAtPath:self.file])
        {
            // attempt to delete file from documents directory
            [fileMgr removeItemAtPath:self.file error:nil];
            if([self.fileMgr fileExistsAtPath:self.file])
            {
    
                NSString *content = @"File still exists after trying to remove it";
                [webview loadHTMLString:content baseURL:nil];
            }
            else 
            {
                [webview loadHTMLString:@"" baseURL:nil];
                NSString *content = @"We've successfully removed the contact file";
                [webview loadHTMLString:content baseURL:nil];
            }
        }
        else {
    
            NSString *content = @"File does not exist no need to remove it.";
            [webview loadHTMLString:content baseURL:nil];
        }
    }
    
    - (IBAction)createFileAction:(id)sender {
    
         // To create file
            [self.fileMgr createFileAtPath:file contents:nil attributes:nil];
    
            [allContacts writeToFile:self.file atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];
    
    
            //Test if file exists now that we have tried creating it
            if([self.fileMgr fileExistsAtPath:self.file])
            {
    
                NSString *content = @"Contact list generated click on view to show the list";
                [webview loadHTMLString:content baseURL:nil];
            }
            else 
            {
    
                NSString *content = @"Contact list is not created yet, click on create to generate the contact list";
                [webview loadHTMLString:content baseURL:nil];
            }
    
    }
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
        // create the fileManager
        self.fileMgr = [NSFileManager defaultManager];
    
        // get array of paths
        self.paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    
        // get documents directory path
        self.documentsDirectory = [paths objectAtIndex:0];
    
        // create the file name with qualified path ot the file
        self.file = [documentsDirectory stringByAppendingPathComponent:@"TestPage.html"];
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      相关资源
      最近更新 更多