PhoneGap:设置ContactAddress时获取未捕获的异常

时间:2012-09-07 03:02:38

标签: cordova

我正在使用PhoneGap在iPhone / Android上保存联系人。总的来说它似乎确实有效,但是当我尝试将一个物理地址设置为我的contact()对象中的contactAddress()对象时,我已经追踪到最近崩溃的事实是它抛出了未捕获的异常。

我在我要保存的联系人上做了JSON.stringify:

{
    "id": 41,
    "rawId": null,
    "displayName": "Joe Customer",
    "name": {
        "givenName": "Joe",
        "familyName": "Customer"
    },
    "nickname": null,
    "phoneNumbers": [
        {
            "name": "work",
            "value": "2145556666",
            "pref": true
        },
        {
            "name": "fax",
            "value": "2147778888",
            "pref": true
        }
    ],
    "addresses": [
        {
            "streetAddress": null,
            "locality": "Dallas",
            "region": null,
            "postalCode": null,
            "country": null
        }
    ],
    "ims": null,
    "organizations": [
        {
            "pref": true,
            "type": "work",
            "name": "Acme Inc.",
            "department": null,
            "title": "Sales Person"
        }
    ],
    "birthday": null,
    "note": null,
    "photos": null,
    "categories": null,
    "urls": [
        {
            "name": "website",
            "value": "http://www.google.com",
            "pref": true
        }
    ]
}

当我尝试保存时,我得到例外:

2012-09-06 21:50:38.358 MyApp[6224:707] typeValue: (null)

2012-09-06 21:50:38.359 MyApp[6224:707] *** WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: <NSInvalidArgumentException> -[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: type)

无论是填写整个地址对象还是只填写一个字段,似乎都会发生。

1 个答案:

答案 0 :(得分:1)

我认为你必须设置联系人的'rawId'字段。在使用Phonegap 2.1和Sencha Touch 2.0时我在Android设备上保存联系人时也遇到了问题,我得到了类似的日志输出,其中包含“invalid argument:int is'null'”或其他内容。当我意识到我必须设置联系人的rawId时,问题就解决了。

在我的情况下,我只是想更新一个已经存在的联系人,所以我将我的联系人对象的id,contactToSave设置为与我想要更新的联系人相同的id。但是当contactToSave.save()执行时,出现了前面提到的错误。

当我不仅将contactToSave的id和rawId设置为与电话簿中的联系人相同时,问题也消失了,我可以毫无问题地更新联系人。

尝试设置联系人的rawId,但我不知道它是什么价值,因为它是一个新的联系人。