【问题标题】:Detect errors in ABPersonCreatePeopleInSourceWithVCardRepresentation()检测 ABPersonCreatePeopleInSourceWithVCardRepresentation() 中的错误
【发布时间】:2012-07-15 00:38:48
【问题描述】:

问题

当我尝试使用损坏的 vCard 数据创建带有 ABPersonCreatePeopleInSourceWithVCardRepresentation()ABPerson 时,我的应用程序崩溃了。这是控制台输出:

2012-07-14 20:20:37.530 vCardTest[4418:707] vCard Syntax Error, character: 7 : /
2012-07-14 20:20:37.531 vCardTest[4418:707] Malformed BEGIN
2012-07-14 20:20:37.534 vCardTest[4418:707] vCard Syntax Error, character: 14 : n
2012-07-14 20:20:37.536 vCardTest[4418:707] Malformed BEGIN
2012-07-14 20:20:37.539 vCardTest[4418:707] vCard Syntax Error, character: 21 : i
2012-07-14 20:20:37.543 vCardTest[4418:707] Malformed BEGIN
2012-07-14 20:20:37.546 vCardTest[4418:707] vCard Syntax Error, character: 28 : o
2012-07-14 20:20:37.548 vCardTest[4418:707] Malformed BEGIN
2012-07-14 20:20:37.550 vCardTest[4418:707] vCard Syntax Error, character: 35 : s
2012-07-14 20:20:37.553 vCardTest[4418:707] Malformed BEGIN
2012-07-14 20:20:37.555 vCardTest[4418:707] vCard Syntax Error, character: 42 : g
2012-07-14 20:20:37.556 vCardTest[4418:707] Malformed BEGIN
2012-07-14 20:20:37.559 vCardTest[4418:707] Malformed BEGIN

我试图做些什么来解决它

  • Apple's docs 不要提及数据损坏时会发生什么。
  • 我尝试了@try@catch,但没有真正抛出异常。
  • 由于框架正在记录所有这些语法错误,我确信它知道发生了什么事。我只是不知道怎么理解。

为什么我关心损坏的数据

生成 vCard 的输入字符串来自我无法控制的不同来源,因此很多时候输入数据甚至根本不是 vCard。我只关心解析有效的 vCard,这就是为什么能够检测到非 vCard 数据并将其丢弃很重要的原因。

【问题讨论】:

    标签: ios vcf-vcard abrecord


    【解决方案1】:

    我遇到了完全相同的问题,做了很多研究,但也找不到任何方法来捕获异常。

    由于错误似乎不会影响我的应用程序,我只是忽略它们并检查在扫描数据中找到了多少有效 vCard - 在我的情况下,vCard 来自 QR 码,我希望它恰好包含一个电子名片。

    CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, scannedVCard);
    
    if(vCardPeople != NULL && CFArrayGetCount(vCardPeople) == 1) {
        // Successfully read one vCard, save it to contacts
        ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, 0);
        // ...
    }
    else {
        // Display an alert view to inform the user about malformed input data
    }
    

    您说您的应用程序崩溃了 - 我认为这只是与格式错误的 vCard 间接相关。也许直到几行之后当您的代码不准备处理空数组时它才会崩溃。

    【讨论】:

    • 你是绝对正确的。我的代码依赖于正确的 vCard,因此崩溃了。我已经实现了您的选项,并且效果很好。我并不真正关心抛出(或记录)什么样的错误,所以这个解决方案非常适合我的情况。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多