我需要以編程方式備份所有記錄(數字,名稱,圖像...)的所有聯繫人。我閱讀了有關AddressBook.framework的內容,但是有沒有簡單的方法來備份所有聯繫人?以編程方式備份完整的iPhone地址簿
1
A
回答
0
這取決於您要備份的聯繫人的屬性。如果你想備份他們的名字和姓氏,請做這樣的事情:
//CREATE ARRAYS STORING FIRST NAMES AND LAST NAMES
NSMutableArray *firstNames = [[NSMutableArray alloc] init];
NSMutableArray *lastNames = [[NSMutableArray alloc] init];
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *arrayOfPeople = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);
for(NSUInteger index = 0; index <= ([arrayOfPeople count]-1); index++){
ABRecordRef currentPerson = (__bridge ABRecordRef)[arrayOfPeople objectAtIndex: index];
[firstNames addObject: (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonFirstNameProperty)];
[lastNames addObject: (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonLastNameProperty)];
}
//BACKUP THE ARRAYS IN A PLIST
NSArray *array=[NSArray arrayWithObjects: firstNames, lastNames, nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *location = [[paths objectAtIndex:0] stringByAppendingString:@"/somefilename.plist"];
[array writeToFile:location atomically:YES];
如果您對代碼有任何疑問,只需在評論中提問即可。希望這可以幫助!
6
1.做到這一點的一種方法是創建一個包含所有聯繫人的電子名片字符串。像這樣:
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef peopleForBackup = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFDataRef vcards = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(peopleForBackup);
vcardString = [[NSString alloc] initWithData:(NSData *)vcards encoding:NSUTF8StringEncoding];
然後將此字符串寫入文件進行備份。從地址簿
2.刪除當前聯繫人:
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
int arrayCount = CFArrayGetCount(people);
ABRecordRef abrecord;
for (int i = 0; i < arrayCount; i++) {
abrecord = CFArrayGetValueAtIndex(people, i);
ABAddressBookRemoveRecord(addressBook,abrecord, NULL);
}
CFRelease(people);
3.To從備份恢復您剛剛通過虛擬卡的人,記錄讀取vCard文件轉換成字符串和itterate,並將其添加爲記錄到地址簿,然後保存。
ABAddressBookRef addressBook = ABAddressBookCreate();
NSData *stringData = [NSData dataWithContentsOfFile:contactFilePath];
NSString *vcardFromFile = [[NSString alloc] initWithData:stringData encoding:NSUTF8StringEncoding];
CFDataRef vCardData = (CFDataRef)[vcardFromFile dataUsingEncoding:NSUTF8StringEncoding];
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(addressBook);
CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
ABAddressBookAddRecord(addressBook, person, NULL);
CFRelease(person);
}
CFRelease(vCardPeople);
CFRelease(defaultSource);
bool success = ABAddressBookSave(addressBook, NULL);
這種方法的一個問題是,我不知道一種方法來維護聯繫人(交換,臉譜...)的鏈接。
相關問題
- 1. 以編程方式編輯地址簿 - iphone
- 2. iPhone地址簿編程:ABPersonSetImageData
- 3. 如何在iPhone中以編程方式打開地址簿?
- 4. 以編程方式檢索iPhone地址簿排序首選項?
- 5. 如何在iphone地址簿中以編程方式保存家庭地址?
- 6. 問題,在iphone中以編程方式添加多個地址到地址簿
- 7. 筆記沒有得到備份完整地址簿從IOS
- 8. 顯示完整地址簿
- 9. 以編程方式訪問iOS中的地址簿?
- 10. iphone地址簿
- 11. 以編程方式從Yahoo!獲取聯繫人地址簿
- 12. iPhone的整個地址簿數據
- 13. 以編程方式備份Azure Sql db
- 14. 如何在iOS7中以編程方式獲取iPhone設備的藍牙地址
- 15. 訪問整個Iphone地址簿
- 16. 以編程方式標識iphone設備
- 17. 從iPhone地址簿中以模態方式呈現MFMailComposeViewController
- 18. 以編程方式檢索infiniband設備的IP地址
- 19. 如何以編程方式獲取iPhone 3G S的MAC地址?
- 20. 如何以編程方式獲取iPhone的藍牙MAC地址?
- 21. Iphone,地址簿中的地址信息
- 22. 在iPhone上實現地址簿自動完成的最佳方式?
- 23. iPhone地址簿 - 實際地址
- 24. iPhone地址簿搜索
- 25. 地址簿+ UITableView索引iPhone
- 26. 喜歡iPhone地址簿
- 27. 多值url地址簿iphone
- 28. 編程/ CLI方式從完全備份告訴MSSQL差異備份?
- 29. 無法編輯iPhone應用程序中的地址簿記錄
- 30. 無法在64bit iPad上以編程方式創建組地址簿
是的。將iPhone連接到iTunes並備份。爲什麼你需要用戶的*全部*聯繫人數據庫的任何特定原因?最近有一些主要的應用程序在這方面遇到麻煩。 – esqew
這是我的應用程序想法所必需的......數據將只存儲在本地。爲什麼這應該是一個問題? – Boeringer