gpt4 book ai didi

iphone - 如何以编程方式从 iPhone 地址簿中获取地址占位符文本?

转载 作者:搜寻专家 更新时间:2023-10-30 20:26:42 25 4
gpt4 key购买 nike

我正在尝试为用户提供一种在基于位置的应用程序中输入地址的方法,我希望它看起来与 iPhone 通讯录/地址簿中的地址完全一样。这意味着我需要根据所选国家更新每个字段的占位符文本。

例如-

美国占位符是:街道、城市、ZIP

英国占位符是:街道、城市、邮政编码

我还必须确保占位符映射到代码中的正确字段(即“County”映射到 state,“Post Code”映射到 zip)。我目前的方法非常麻烦:遍历并选择联系人中的每个国家并手动复制文本,然后确保字段映射正确。

是否有任何编程方式可以做到这一点?即使是通过私有(private) API 调用,我只需要执行一次以获取信息,然后我就可以删除代码。我在 Apple 的文档中找不到任何内容来提供此类信息(ABAddressBook 文档)。

最佳答案

不确定,如果我没猜错的话。您需要每个字段的区域设置名称 - 例如语言环境翻译,法语、德语等?

一般来说,地址字段不多 - 请参阅:ABPerson.h 头文件:

// Addresses
extern const ABPropertyID kABPersonAddressProperty; // Street address - kABMultiDictionaryPropertyType
extern const CFStringRef kABPersonAddressStreetKey;
extern const CFStringRef kABPersonAddressCityKey;
extern const CFStringRef kABPersonAddressStateKey;
extern const CFStringRef kABPersonAddressZIPKey;
extern const CFStringRef kABPersonAddressCountryKey;
extern const CFStringRef kABPersonAddressCountryCodeKey;

如果您需要字段名称(因为可能会有个人幻想的名称 ;)),请务必像这样使用 ABAddressBookCopyLocalizedLabel:

CFStringRef label = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(multiValue, j));

如果我弄错了,也许你想澄清你的问题。

吉米

编辑:

好吧,我仍然不确定我是否理解正确,但我会以“两种”方式回答你;)

首先是您需要通用字段名称(独立于区域设置)- 您可以通过这种方式获得那些(在您项目的当前区域设置中):代码使用 NSArrays 和 NSDictionaries,具体取决于地址簿卡片的条目:

- (void) logAddressBook {

ABAddressBookRef addressBook = ABAddressBookCreate();

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

int i;
for(i = 0; i < [addresses count]; i++) {
ABRecordRef record = [addresses objectAtIndex:i];
NSString *firstName = (NSString *)ABRecordCopyValue(record, kABPersonFirstNameProperty);
NSString *lastName = (NSString *)ABRecordCopyValue(record, kABPersonLastNameProperty);

NSLog(@"%@, %@", lastName, firstName);

ABMultiValueRef multiValue = ABRecordCopyValue(record, kABPersonEmailProperty);

int count = ABMultiValueGetCount(multiValue);
int j;
for(j = 0; j < count; j++) {
CFStringRef label = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(multiValue, j));
NSString *value = (NSString *)ABMultiValueCopyValueAtIndex(multiValue, j);

NSLog(@"Email for %@: %@", label, value);

CFRelease(label);
}

//Get the contact´s addresses
CFTypeRef adressesReference = ABRecordCopyValue((ABRecordRef)record, kABPersonAddressProperty);

CFIndex mvCount = ABMultiValueGetCount(adressesReference);
if (mvCount > 0) {
NSLog(@"Addresses: ");
for (j=0; j < mvCount; j++) {
CFStringRef key = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(adressesReference, j));
NSDictionary *values = (NSDictionary *)ABMultiValueCopyValueAtIndex(adressesReference, j);

NSLog(@"%@ - ", key);
NSEnumerator *enumerator = [values keyEnumerator];
id innerKey;

while ((innerKey = [enumerator nextObject])) {
/* code that uses the returned key */
NSString *value = (NSString *)[values objectForKey: innerKey];
CFStringRef innerKeyLabel = ABAddressBookCopyLocalizedLabel((CFStringRef)innerKey);
NSLog(@"key: %@ -> value: %@", innerKeyLabel, value);
}

}
}

CFRelease(adressesReference);

}

}

查看日志,您会看到如何获取您喜欢的所有标签和值 - 只需将代码扩展到您想要的字段即可。

我回答的另一部分:我想知道您是否只想查看用户可能使用的不同语言的标签作为语言环境。比如法语,德语等。如果你想看这个(有ABAddressBookCopyLocalizedLabel可以使用不同的语言)我只在项目的.plist文件中找到'Localization native development region'。如果你改变这个,翻译就会改变。以用户语言向您显示标签。

我不确定是否可以通过编程方式更改它。如果你知道办法,请告诉我 ;)

所以,我希望这对您有所帮助,您会喜欢我更正的答案:)

吉米

关于iphone - 如何以编程方式从 iPhone 地址簿中获取地址占位符文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com