问题标签 [addressbook]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
962 浏览

cocoa - 地址簿线程安全和性能

我从通讯簿文档中的感觉和我对底层 CoreData 实现的理解表明通讯簿应该是线程安全的,并且从多个线程进行查询应该没有问题。但是我在文档中找不到任何关于线程安全的明确讨论。这提出了几个问题:

  • 在多个线程上使用 +sharedAddressBook 进行只读访问是否安全?我相信答案是肯定的。
  • 对于后台线程的写访问,您似乎应该使用 +addressBook 代替(并手动保存您的更改)。我理解正确吗?
  • 有没有人调查过在多个线程上对通讯簿进行多个同时查询对性能的影响?这应该与在多个线程上进行多个 CoreData 查询的性能非常相似。我的感觉是,通过并行查询我不会获得什么好处,因为我假设它们在遇到 SQLLite 时会序列化,但我在这里不确定。

我需要对 AddressBook 进行数十次查询(有些复杂),并且正在使用 NSOperation 在后台线程上执行此操作以避免阻塞 UI(它目前正在这样做)。我的基本问题是将最大并发操作设置为大于 1 的值是否有意义,以及如果应用程序也可能同时在另一个线程上写入 AddressBook 是否有任何危险。

0 投票
1 回答
1477 浏览

iphone - ABPersonSetImageData 不显示图像

我使用 ABUnknownPersonViewController 来显示联系人视图。

我尝试使用以下方式设置图像:

它不起作用,我不知道为什么。有任何想法吗?

0 投票
2 回答
8981 浏览

iphone - iPhone SDK:带有 CFRelease 的 EXC_BAD_ACCESS 用于 ABAddressBookRef

我的代码有一个非常奇怪的错误。事实上,根本没有错误,只是调试器以“程序接收信号:”EXC_BAD_ACCESS“”消息开始。谁能帮我?我非常困惑......谢谢。

控制台输出为:

按继续输出“EXC_BAD_ACCESS”消息。Xcode 显示,我的代码中最新执行的字符串是CFRelease(addressBookRef);

0 投票
1 回答
335 浏览

iphone - 通讯簿常量评估为零

我有一个程序,其中对于某些代码路径,地址簿常量(例如 kABPersonEmailProperty、kABPersonAddressProperty)评估为它们的正常非零值。但是,如果我遵循不同的代码路径,所有这些常量的计算结果都为零。

此外,一旦我遵循“成功”的代码路径,如果我采用有问题的代码路径,它就会起作用。

这是某种编译链接问题吗?

我也可能在某处过度释放变量。

0 投票
3 回答
1753 浏览

iphone - 将联系人列表保存到 NSUserDefaults

使用 iPhone 内置的通讯簿框架,如何将特定的联系人列表保存到 NSUserDefaults 中的数组中?我需要保存收件人列表以备后用。

如果用户在我的应用程序关闭后编辑联系人,我想确保我不会遇到问题。每个联系人是否有某种唯一 ID,我可以保存并稍后查找?

0 投票
0 回答
850 浏览

iphone - 人员选择器导航控制器中的空“组”

我正在使用标准的人员选择器导航控制器让用户将他们的联系人之一与我的对象之一相关联。

它以一长串所有联系人的形式呈现。

后退按钮(左上角)显示“组”,但当单击它时,即使用户的通讯录中有许多组,它也会显示一个空白屏幕。

我已通读文档,似乎无法找到如何填充“组”区域。

以下是我介绍人员选择器的方式。相当标准:

我错过了什么?

0 投票
3 回答
3430 浏览

iphone - 在 iPhone ABAddressBook 中读取性能问题

我正在创建一个查找表,将联系人电话号码映射到其相应的 ABRecordRef(我需要这个,以便我可以根据用户拨打的电话号码有效地查找联系人姓名和照片)。

不幸的是,对于 500 个联系人,循环所有联系人并创建我的查找表需要大约 4 秒,这使得我的应用程序加载速度太慢。

有没有其他人看到过这样的问题或有任何建议的解决方法?

我正在运行 OS V3.0 的 3G iPhone 上进行测试。该项目是为目标“设备 2.1”构建的。

这是代码:

for 循环之前的第一部分代码只需要 0.2 到 0.75 秒即可运行(包括 ABAddressBookCopyArrayOfAllPeople)。

最初在外部 for 循环中只有一个 NSLog 行,但我在设备上进行测试之前对其进行了预处理。

看到问题后,我在每一行代码之间放置了 NSLog 行,并且似乎没有一行代码比其他代码行造成明显更长的延迟。有了所有这些跟踪行,创建查找表需要大约 50 秒,每行输出大约需要 0.01 秒,偶尔会有 0.1 到 0.2 秒的延迟(每次不是同一行代码)。

任何想法,将不胜感激!

当我运行泄漏检查器时,我非常有信心不存在内存管理错误。似乎也没有任何方法可以根据电话号码单独查找联系人。

(2009 年 11 月 2 日)我现在向 Apple 提出了针对此问题的错误:
-错误 ID#7357996(性能)-ABAddressBook SDK API 的性能
很差-错误 ID#7357980(增强)-ABAddressBook 无法根据电话查找联系人数字

0 投票
3 回答
3442 浏览

iphone - 在 ABPeoplePickerNavigationController 上取消selectRowAtIndexPath

我在我的应用程序中将 ABPeoplePickerNavigationController 显示为选项卡。用户单击名称,然后单击电子邮件地址,然后我对电子邮件地址进行操作。

之后,我希望他们选择的人和财产淡出(不突出显示)。

在普通表中,我会调用 deselectRowAtIndexPath。但是对于 ABPeoplePickerNavCont,我似乎无法访问它的表,也不知道选择了什么 indexPath,也没有用于取消选择行的 api。

在大多数应用程序中,ABPeoplePickerNavCont 以模态方式使用,因此该行仍然突出显示并不重要,因为整个事情都被忽略了。但在我的应用程序中,它不会被忽略(就像电话应用程序中的联系人选项卡一样)。

有任何想法吗?

0 投票
1 回答
31329 浏览

iphone - 如何正确使用 ABPersonViewController 和 ABPeoplePickerNavigationController 来查看联系信息?

2010 年 9 月 2 日更新:此代码在 iOS 4 更新后不再有效 - 它因内部断言而失败。现在在 iPhone SDK 参考库中提供了一个很棒的地址簿 API 示例,称为“QuickContacts”。

示例代码可在此处获得;它将帮助您解决这个问题:http: //developer.apple.com/iphone/library/samplecode/QuickContacts/Introduction/Intro.html


我正在尝试向我的应用程序添加一项功能,该功能允许用户从ABPeoplePickerNavigationController中选择联系人,然后显示与他们选择的联系人相对应的ABPersonViewController 。那时,我希望用户能够单击联系人的电话号码并让我的应用程序以自定义行为响应。

我的ABPeoplePickerNavigationController工作正常,但在显示ABPersonViewController时遇到问题。我可以让ABPersonViewController很好地在屏幕上显示动画,但它只显示联系人的照片、姓名和公司名称。不显示联系人的其他字段。

我使用ABPersonViewController中的“displayedProperties”元素来告诉程序显示电话号码。这会产生一些奇怪的行为;当我选择没有分配电话号码的联系人时,联系人会在背景中写入“无电话号码”(如您所期望的),但在选择有电话号码的联系人时,我得到的就是一个空白的联系页面(没有“无电话号码”文本)。

这是我用来创建我的PersonViewController类的ABPeoplePickerNavigationController 委托类中的方法,该类实现了ABPersonViewController 接口:

这是我的PersonViewController.h头文件:

最后,这是我的PersonViewController.m,它正在创建ABPersonViewController以查看所选联系人:

有谁知道为什么我看到这个空白的联系人屏幕而不是带有可点击电话号码字段的屏幕?


好吧,我想我离发现问题越来越近了。我相当确定它与上面 displayContactInfo 调用的这一部分有关:

当我省略这一行时,当我点击一个联系人时,我看到的只是一个空白屏幕。ABPeoplePickerNavigationController 将 PersonViewController 推送到 NavigationController 堆栈上。PersonViewController 然后实例化一个 ABPersonViewController 对象,但无论出于何种原因,ABPersonViewController 永远不会正确添加到 NavigationController 堆栈中。

有谁知道如何将 ABPersonViewController 添加到堆栈中,而不仅仅是 PersonViewController?

0 投票
1 回答
1686 浏览

iphone - 解除 ABUnknownPersonViewController 的问题。显示正常,但关闭时应用程序崩溃

我的应用由 2 个视图组成。主视图和结果视图。MainView 包含需要填充的 UITextField,然后如果触摸按钮,视图将更改为 ResultsView。下面是处理该问题的代码的有趣部分。

现在ResultsView我有一个包含一些内容的表格视图。What I want to do is, when a row from that tableview is selected, I want to invoke the ABUnknownPersonViewControllerso the user can save a contact to the addressbook.

所以在ResultsViewController.m

选择ABUnknownPersonViewController行时正确显示。它还包含所有发送的正确信息,personRecord并在按下“添加到联系人”按钮时将联系人正确保存在地址簿中。但是,当在最后一步按下完成(或取消)按钮时,它会崩溃非常糟糕!

问题是,我无法理解调试器中的任何内容,因为在启动时,它会显示“正在加载 43453 个堆栈帧……”,我停止了该过程。堆栈跟踪的顶部是:

然后有很多

请赐教。我敢肯定,我做错了可能有点愚蠢。我已经尝试了几个小时来解决这个问题,但我做不到。:(