2009-05-23 58 views
0

我目前正在將模型對象填充到NSSet中(也許我應該使用NSCountedSet)。模型應該是唯一的。我所做的就是從Web服務中提取它們,然後在客戶端實例化它們並將它們添加到集合中。如何檢查NSSet或NSCountedSet中的現有項目?

我的問題如下:有時我只會拉一個模型並將其添加到集合中,例如說我擁有法拉利的庫存。所以我會要求我的服務器把我拉進一個特定的法拉利,因爲一個人從庫存中點擊了法拉利的詳細視圖。單獨的法拉利詳細視圖將列出該模型可用的所有不同塗料。因此,一旦用戶鑽入法拉利的這一觀點,我會向服務器詢問特定法拉利車型的所有油漆。

接下來,用戶退出,然後前往視圖控制器,該視圖控制器要求我爲每輛車提供的所有塗料顏色。我已經擁有法拉利塗料。現在我要求服務器上的所有顏料。在不重複資源的情況下,將所有塗料聚合現有塗料的最佳方法是什麼?

回答

2

您需要的是從服務器中唯一標識每個對象的方法。在數據庫中,一個對象(部分或全部)可以表示爲一行,而rowid通常是一個單調遞增的整數(儘管您的數據源可能使用其他的東西)。在任何情況下,將這個唯一的ID存儲在您創建的每個對象中,並在創建新對象之前檢查是否存在具有該ID的對象。如果對象已經存在,則返回現有對象,如果不存在,則創建一個新對象,然後將其存儲在緩存中。使用整數作爲ids可以很好地工作,因爲您可以使用NSMapTable作爲緩存,並將rowid用作鍵,並且這些值是對象指針。

0

保持在您的應用程序基礎上,你的容貌有些hash function存儲NSString*對象的NSArray*

hashValue = hash(color + horsepower + leatherSeating + whatever...) 

例如,您可能採取的SHA1哈希整理字符串(example code)的。

獲取您從Web服務獲得的功能,並使用相同的功能從它們生成散列值。

使用-containsObject:搜索應用程序的哈希表以獲取網絡服務值。

如果返回YES,做X,做別的ÿ

+0

爲什麼不直接在模型對象類中實現-hash並繼續使用NSSet? – 2009-05-23 05:26:44