2009-11-19 84 views
4

在我的許多應用程序中,它需要將某些數據與地址簿中的聯繫人相關聯。我之前做的是保存ABPerson的記錄ID,並使用該ID在每次應用啓動時提取信息。然而,越來越多的我發現這種方法是錯誤的,因爲很多時候,用戶將使用諸如移動地址簿被擦除和重新生成的服務。這會導致記錄ID發生更改,並且所有關聯都會丟失。用戶必須通過每一個並重新鏈接它們。與ABPerson關聯的正確方法是什麼?

什麼是更好的方法來保持一個健壯的指針地址簿條目?

回答

5

您應該存儲三個值:記錄ID,名字和姓氏。

1)在記錄ID沒有變化的情況下,你是黃金 - 只需使用它來找到正確的記錄。

2)如果ABAddressBookGetPersonWithRecordID()沒有找到您存儲的記錄ID(它返回NULL)的記錄,那麼您需要根據姓氏和名字搜索匹配記錄。如果已經有一個包含所有人員記錄的陣列,則可以使用ABAddressBookCopyPeopleWithName()潛在地或者編寫自己的定位代碼。查找新記錄取決於您。一旦找到新記錄,您可以使用新記錄ID更新數據存儲。

最終,您最終會直接存儲要使用的記錄ID,以便它不會更改(如果幸運的話),以及存儲地址簿條目中不太可能更改的某些密鑰。與地址簿條目關聯的人員或組織的名稱最有可能發生變化。當然,您應該考慮您可能無法找到存儲了記錄ID的記錄或通過搜索名稱的情況。這可能意味着記錄被刪除,或者可能意味着該記錄被重命名。無論您決定哪種方式最適合您的特定應用,您都應該處理該案例。

0

如果地址簿確實被完全擦除並重新加載,並且唯一不會改變的部分是顯示名稱,那麼將顯示名稱存儲爲鏈接似乎是唯一的選擇。

2

我知道這是去年,但是,我想我可能會提出一種我使用的方法。我第一次要求用戶選擇一個聯繫人(爲了將我的應用程序的某些私人數據與它聯繫起來),然後抓取記錄,創建我自己的內部記錄ID(通常是應用程序名稱的首字母和序列號)通過添加我自己內部記錄ID的新ABRelatedName(「其他」的「前綴」名稱的類型)值來修改聯繫人。它看起來像這樣的的.vcf

item3.X-ABRELATEDNAMES;type=pref:BZA101 
item3.X-ABLabel:_$!<Other>!$_ 

這樣的話,我可以簡單地引用記錄ID,當我添加有關用戶的更多數據,如最後一次應用的用戶聯繫他們,等似乎對於工作我。

希望能幫助別人。

+0

這不適用於iOS?還是僅Mac OS X? – 2013-01-17 19:08:51

相關問題