我使用苹果公司的通讯录创建了一个简单的联系人应用程序,并与以下委托人ABNewPersonViewControllerDelegate、ABPeoplePickerNavigationControllerDelicate和ABPersonViewController Delegate一起创建,它具有创建、编辑和删除联系人的功能。现在我想添加一个选项,通过该选项,我创建的所有联系人以及电话号码都将导入到文本文件中。这是我的代码:
-(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上,tweet包含所有值,但格式如下:FirstName LastName--->ABMultiValueRef 0x6c26760,其中包含1个值0:$$(0x6c26b60)-电话号码(0x6c26 b80)
我需要这种格式的名字姓氏--->电话号码
2) Contact.txt文件未被填充。在NSLog上,路径正确。请告诉我这里出了什么问题。
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"];
}