2014-07-14 53 views
0

我想做一個應用程序,將地址簿聯繫人的ID存儲到使用核心數據的SQLite文件。地址簿和核心數據

我的問題是我想要隨機請求一些這些ID,並且聯繫人ID不可靠,因爲聯繫人ID可能存在空白,所以我想要一種索引屬性,我可以做我的隨機在索引中永遠不會有空白,如果我從我的數據庫中刪除一些ID,我想確保索引被重新索引(不確定索引是否是正確的名稱,也許是一個鍵)。

核心數據自動執行嗎?它是否爲我默認創建的任何數據模型創建了一個鍵?如果是這樣,我可以訪問它並利用它嗎?如果我刪除一行會發生什麼?

對不起,這可能是一個初步問題。

另外,當地址簿更改爲ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, *context)時,更新我的SQLite文件的最佳方式是什麼?我將不得不重寫整個地址簿到我的SQLite?

+0

你是否需要該「索引」屬性才能獲得隨機數據?或者它也有其他用途? – iAmd

+0

只是爲了獲得隨機數據,因爲如果我隨機在聯繫人ID,我從地址簿中獲得,有很高的機會,我會得到無效的ID,我將不得不尋找其他的ID,這可能會使用一段時間。 –

回答

1

對於第1部分:

寫讀取請求,將返回所有聯繫人實體。然後用-countForFetchRequest:來確定你有多少。

在實體數量範圍內生成一個隨機整數。

現在寫另一個取指令請求與-fetchOffset等於隨機整數,且1.

fetchLimit對於第2部分: 爲ABExternalChangeCallback文檔沒有列出,將表示哪個對象改變任何參數。但是,您可以按kABPersonModificationDateProperty對地址簿進行排序,並查看自上次同步以來更改的記錄。

+0

我得到了那部分,謝謝。 當地址簿更新後,如果我想用我更新的地址簿覆蓋整個核心數據文件,我該怎麼做? –

+0

最簡單的方法是用新名稱從頭開始重新創建數據文件。然後關閉舊的,移動新的,然後重新打開。如果您的重建因任何原因失敗,您的原始數據仍然完好無損,您可以再試一次。 –