我正在使用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)
无论是填写整个地址对象还是只填写一个字段,似乎都会发生。
答案 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,但我不知道它是什么价值,因为它是一个新的联系人。