草庐IT

iphone - 保持对 IOS AddressBook 条目的长期引用

coder 2023-07-26 原文

鉴于 ABRecordID 可以在云同步之间以及在我无法控制的其他情况下发生变化,我如何维护对 IOS 通讯簿记录的长期引用?

Apple 提供以下指导:

“保留对特定记录的长期引用的推荐方法是,除了标识符之外,还存储名字和姓氏,或者名字和姓氏的哈希值。当您通过以下方式查找记录时ID,将记录的名称与您存储的名称进行比较。如果它们不匹配,则使用存储的名称查找记录,并为记录存储新的 ID。”

但是我不明白这个指南。如果地址簿中可以有重复的名字,并且由于用户可以修改记录中的名字,这个建议怎么会起作用?

例如,如果用户修改地址簿记录的名称,我的例程将无法通过 ABRecordID 找到它,所以如果我认为通过我存储的名称哈希进行搜索,我无法找到重复的名称而不是新的 ABRecordID对于我之前引用的那条特定记录?

最后,获得 IOS AddressBook 记录的长期引用的最佳方法是什么?如果上述建议确实有效,我还缺少什么?

最佳答案

最稳健(但并非完全故障安全)的方法是提出 ABRecord 字段的优先级排序,并从该列表中尽可能多地存储可用的 ABRecordID,并将其存储到您自己的(散列的)私有(private)记录格式中.检索私有(private)记录时(或在其他方便的时间),您可以验证私有(private)记录是否与 ABRecord 匹配,并通过一系列后备检查来确保其准确无误。

示例优先级排序:

  1. ABRecordID
  2. 名字
  3. 姓氏
  4. 电话号码
  5. 邮政编码

检索记录时,您可以先匹配ABRecordID。如果没有返回任何结果,您可以搜索 FirstName + LastName。然后,您可以将这些结果与 PhoneNumber... 等进行匹配。通过这种方式,您可以区分 2 个 Bob Smiths,因为他们可能有不同的电话号码(或者一个人可能没有电话号码)。当然,根据您的优先级列表的长度,此机制将越强大。

最后的手段是提示用户区分 2 个具有全新 ABRecordID 的 Bob Smiths,他们的记录在其他方面是相同的——毕竟,这样一个不方便的提示会比允许用户联系错误的 Bob Smith(正如我所说,这将是最后的手段)。

但是,此 AB 解决方案可能涉及一些同步问题。

对于使用过 iOS Media Player 的任何人来说,这是一个熟悉的问题。具体来说,用户音乐库中的 MPMediaItems 有一个属性 MPMediaItemPropertyPersistentID,文档将其描述为:

The value is not guaranteed to persist across a sync/unsync/sync cycle.

换句话说,PersistentID 不保证是持久的。解决方案包括对 MediaItem 属性进行类似的回退检查。

关于iphone - 保持对 IOS AddressBook 条目的长期引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14763688/

有关iphone - 保持对 IOS AddressBook 条目的长期引用的更多相关文章

  1. ruby - 一个 YAML 对象可以引用另一个吗? - 2

    我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的ruby​​yaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir

  2. ruby - Chef LW 资源属性默认值如何引用另一个属性? - 2

    我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我

  3. ruby - 在 Ruby 中,为什么 Array.new(size, object) 创建一个由对同一对象的多个引用组成的数组? - 2

    如thisanswer中所述,Array.new(size,object)创建一个数组,其中size引用相同的object。hash=Hash.newa=Array.new(2,hash)a[0]['cat']='feline'a#=>[{"cat"=>"feline"},{"cat"=>"feline"}]a[1]['cat']='Felix'a#=>[{"cat"=>"Felix"},{"cat"=>"Felix"}]为什么Ruby会这样做,而不是对object进行dup或clone? 最佳答案 因为那是thedocumenta

  4. ruby - 引用具有指定索引的枚举器值 - 2

    假设我有一个可枚举对象enum,现在我想获取第三个项目。我知道一种通用方法是转换成数组,然后使用索引访问,如:enum.to_a[2]但这种方式会创建一个临时数组,效率可能很低。现在我使用:enum.each_with_index{|v,i|breakvifi==2}但这非常丑陋和多余。执行此操作最有效的方法是什么? 最佳答案 你可以使用take剥离前三个元素,然后剥离last从take给你的数组中获取第三个元素:third=enum.take(3).last如果您根本不想生成任何数组,那么也许:#Ifenumisn'tanEnum

  5. ruby - 如何保持我不常用的编程语言技能 - 2

    关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby​​-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby​​有很大不同。由于我与ruby​​之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?

  6. ruby - 在多个线程中引用类方法会导致自动加载循环依赖崩溃 - 2

    代码:threads=[]Thread.abort_on_exception=truebegin#throwexceptionsinthreadssowecanseethemthreadseputs"EXCEPTION:#{e.inspect}"puts"MESSAGE:#{e.message}"end崩溃:.rvm/gems/ruby-2.1.3@req/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:478:inload_missing_constant':自动加载常量MyClass时检测到循环依赖稍加研究后,

  7. Ruby 泄露的对象被 RubyVm::Env 引用 - 2

    我正在跟踪我们的应用程序(ruby2.1)中的内存泄漏问题。我正在使用这两种技术:ObjectSpace.dump_all将所有对象转储到JSON流,然后进行离线分析。我使用的第二种技术是使用ObjectSpace.reachable_objects_from进行实时分析。在这两种方式中,我发现我泄漏的对象被一个对象RubyVM::Env引用。任何人都可以向我解释什么是RubyVM::Env。如何删除这些引用? 最佳答案 RubyVM::Env是一个包含变量引用的内部ruby​​类。这是我的测试:require'objspace'a

  8. ruby - 方法如何引用运算符。 : work? - 2

    这个问题不是很有用因为themethodreferenceoperatorwasremovedfromRuby2.7.0发布前。由于历史原因,这个问题被搁置了。Ruby2.7.0-preview1引入了方法引用运算符.:作为实验性功能。(更多here和here)。有一些抽象示例可用于说明如何使用这个新运算符:method=42.:to_s=>#method.receiver=>42method.name=>:to_smethod.call=>"42"和:method=File.:read=>#method.call('/Users/foo/.zshrc')=>"exportZSH=$H

  9. ruby 认为我在引用一个顶级常量,即使我指定了完整的命名空间 - 2

    在我的应用程序中我有classUserincludeUser::FooendUser::Foo定义在app/models/user/foo.rb现在我正在使用一个定义了自己的Foo类的库。我收到此错误:warning:toplevelconstantFooreferencedbyUser::FooUser仅引用具有完整路径的Foo,User::Foo,而Foo实际上从来没有指的是Foo。这是怎么回事?更新:才想起我之前遇到过同样的问题,在问题1中看到这里:HowdoIrefertoasubmodule's"fullpath"inruby? 最佳答案

  10. ruby - 维基引用API? - 2

    我想通过JSON获取Wikiquote页面的结构化版本(基本上我需要所有短语)示例:http://en.wikiquote.org/wiki/Fight_Club_(film)我试过:http://en.wikiquote.org/w/api.php?format=xml&action=parse&page=Fight_Club_(film)&prop=text但我得到了所有HTML源代码。我需要每个pharse作为数组的一个元素我如何使用DBPEDIA实现这一目标? 最佳答案 首先,我不确定您是否可以使用DBpedia查询wiki

随机推荐