2012-04-14 119 views
2

我正在開發一個使用CoreData的應用程序。iPhone核心數據獲取主鍵

所以在.sqlite文件中,它管理主鍵本身。

主鍵屬性名稱是Z_PK

我的問題是,我希望我的表中的數據按主鍵升序排列。

我使用的代碼

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"_PK" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 

但它不工作。

當我使用「標題」 insted的「_PK」的,它的正常工作

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; 
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; 
[sort release]; 

那麼,有沒有使用表的主鍵有什麼不同呢?

+0

你可以發佈圖片或Xcdatanodel,因爲你的問題有點不清楚? – 2012-04-14 11:47:30

+0

**核心數據中的主鍵?** – 2012-04-14 11:47:56

+0

Hello Nikita,我將.Sqlite文件寫入文檔目錄。 – 2012-04-14 11:53:38

回答

4

CoreData管理持久對象圖。這不是一個RDBM。您無法控制唯一主鍵,因此您無法控制其值。這只是一個實現細節,不應因任何原因而被引用。

因此,您爲什麼要根據它進行排序?我可以想到幾個理由......

  1. 你想訪問的對象的順序,他們被添加到數據庫。但是,您可以通過多種方式輕鬆完成此操作。

1a。您可以爲每個實體添加一個字段。您可以將其設置爲一個UUID,或者以遞增的整數。

1b。你可以有一個實體,像「EntityList」,它與「Entity」有一個有序的一對多關係。

1c。您可以添加從Entity到自身的一對一關係,然後像鏈接列表一樣管理它。每次添加實體時,都將其放在列表的末尾。

這兩種解決方案都使您能夠訪問實體對象以添加它們。

  1. 或者,你真的不在乎你看到他們的順序,但你想要一個一致的順序。

2a。添加一個primaryKey屬性,併爲其分配一個UUID。

2b。使用有序的對多關係。

最後,如果你真的想要基於主鍵的訪問,我會建議有一個單獨的sqlite數據庫,你用於特殊的鍵控訪問。然後,您可以將鍵關聯到CoreData存儲中的對象的objectID。

+0

謝謝喬迪,我有一個改變網絡解決方案。但我只是想知道這是可能的還是不可以的?感謝幫助。 – 2012-04-16 13:03:49