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

2024-05-27

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

例如-

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

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

我还必须确保占位符映射到代码中的正确字段(即“县”映射到州,“邮政编码”映射到邮政编码)。我当前的方法非常麻烦:浏览并选择联系人中的每个国家/地区并手动复制文本,然后确保字段映射正确。

有没有任何编程方法可以做到这一点?即使是通过私有 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));

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

jimmy

EDIT:

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

第一个是您需要通用字段名称(与区域设置无关) - 您可以通过这种方式获取这些名称(在项目的当前区域设置中):代码使用 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文件中找到了“本地化本机开发区域”。如果你改变这个,翻译就会改变。以用户语言显示标签。

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

所以,我希望这对你有帮助,喜欢我的正确答案:)

Jimmy

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式从 iPhone 地址簿获取地址占位符文本? 的相关文章

  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • iPhone 应用程序中的异步、同步、线程

    我正处于一个应用程序的设计阶段 该应用程序将利用 REST Web 服务 并且在使用异步 同步和线程方面遇到了困境 这是场景 假设您有三个选项可供深入研究 每个选项都有自己的基于 REST 的资源 我可以使用同步请求延迟加载每个请求 但这会
  • 如何替换已弃用的方法dispatch_get_current_queue()? [复制]

    这个问题在这里已经有答案了 我正在 iOS 5 中使用 xmppframework 开发一个聊天应用程序 它工作得很好 但我将 Xcode 更新到 4 5 1 将 iOS 5 更新到 iOS 6 将 Mac OS 更新到 10 7 5 但由
  • 是否可以使用 Firebase 安排推送通知? [复制]

    这个问题在这里已经有答案了 我已经阅读了我能找到的所有文档 但仍然不知道这是否可行 如果我是用户 我可以安排特定时间的推送通知吗 Example 1 我是用户并打开应用程序 2 我允许通知并转到 pickerView 或其他任何内容 并设置
  • 在 OS X 上创建和使用静态库

    好的 我正在尝试创建一个 Cocoa 库 静态 并使用 但我不断收到错误 我创建了一个超基本的静态库 TSXLib 其中仅包含一个额外的类 import
  • 在 iOS 上将 NSString 转换为 NSDate 的正确方法?

    我一直在使用此方法将常规 NSString 对象转换为 NSDate 但尝试向 Apple 提交更新 但遭到拒绝 在 iOS 中还有什么其他方法可以做到这一点 NSString date str 2011 08 12T12 20 00Z N
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 在 XCode 中链接静态 ObjC 库的过程

    我正在尝试链接到静态库 但不断收到链接器错误 我发现了一些发布示例的网站 但我无法看到我做错了什么 首先 我创建一个链接到我的库的项目 添加 gt 现有文件找到我的 xcodeproj 文件选择 将项目复制到目标组文件夹 选择我的宿主项目作
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • insertNewObjectForEntityForName:

    我使用 Xcode xcdatamodel 文件编辑器设置了一个实体 我创建了一个名为 Person 的实体 添加了一些属性 然后生成了一个 m 文件来表示它 一切都很好 现在 当我去编写一行代码时 例如 Person person Per
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • 如何在 iOS 8 中关闭两个 UIViewController?

    我正在使用 Objective C 开发 iPhone 应用程序 由于我需要一次关闭两个 UIViewController 所以我使用下面的代码 self presentingViewController presentingViewCon
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • 如何检测用户是否第一次打开应用程序[重复]

    这个问题在这里已经有答案了 是否可以检测用户是否是第一次打开iOS应用程序 使用Objective C 我想在用户第一次打开应用程序时显示欢迎消息 但之后不再向他们显示 我正在寻找类似的东西 BOOL firstTime AppDelega
  • 有没有类似于 iOS 的 canOpenURL 来检查移动浏览器的 URL 方案? [复制]

    这个问题在这里已经有答案了 可能的重复 iPhone Safari 检查 JavaScript 是否支持 URL 方案 https stackoverflow com questions 627916 iphone safari check
  • 在 iOS 应用程序中拨打电话

    我有一些代码尝试在应用程序中进行调用 但它似乎不起作用 UIApplication myApp UIApplication sharedApplication NSString theCall NSString stringWithForm
  • Objective-C 中是否有相当于 C++ 动态转换的功能?

    如果我有两个类 子类和超类 SuperClass super new SuperClass SubClass sub new SubClass SubClass sub pointer The nice one line cast belo
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • iOS7 由 Interface Builder 生成的 NSIBPrototypingLayoutConstraint 自动布局约束问题

    以前在 iOS6 中 我的聊天消息视图控制器使用 IB 中精心构建的自动布局约束正确显示和动画 下面是 Xcode 5 中删除了约束的当前视图层次结构 升级到 XCode 5 和 iOS7 后 我发现我需要清除所有旧的约束才能解决默认的半透

随机推荐