2012-06-23 124 views
0

我正在開發一個iOS應用程序,它會有許多圖像。這些圖像與Show對象和Band對象相關聯。我對iOS開發相當陌生圖像處理rails + iOS核心數據

在服務器上,節目和樂隊與一系列圖像相關聯。目前我用以下信息存儲圖像:

height:integer width:integer imageType:string imageData:binary 

第一個問題是:應該有更多?

其次,我堅持使用核心數據顯示和樂隊對象。我不想堅持這些圖像,因爲我很快就會耗盡內存。我將它們存儲在緩存目錄中。我的第二個問題是:Show和Band對象應該如何跟蹤圖像?我應該在模型中有一個Image對象,並且與節目和樂隊有很多關係。但是這些Image對象可能只包含高度,寬度,圖像類型和緩存圖像的路徑。我的想法是,如果它在緩存目錄中找不到,它會從服務器獲取imageData。

這樣做的正確方法是什麼?

UPDATE

我還打算與查驗HEAD服務器,以檢查是否爲imageData已經越來越緩存版本之前更新。

回答

1

實際上,您可以直接使用Core Data存儲圖像,而不必混淆文檔。

這已經回答了其他地方,但我會在這裏反正把代碼:

爲了節省:

NSData *imageData = UIImagePNGRepresentation(yourUIImage); 
[newManagedObject setValue:imageData forKey:@"image"]; 

和負載:

NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"image"]]; 
[[newCustomer yourImageView] setImage:image]; 

的方式,你應該建模您的數據取決於圖像與樂隊/節目之間的關係。

做展示和樂隊每個涉及多個圖像?節目可以有與多個樂隊相關的圖像嗎?

最終,您可能希望擁有一個Image核心數據實體,該實體根據您對這些問題的回答將與樂隊/演出有一對一或多對多關係。您還需要添加反向關係,以便例如查看節目時,還可以訪問與其關聯的一組圖像。

如果您提供有關對象之間關係的更多詳細信息,可能會更容易幫助您。

+0

感謝您的信息。我想過這樣做,但是,我的恐懼是我不想堅持這麼多的數據。我預計用戶將會通過一些樂隊和節目細讀,這會導致這些圖像的積累。如果我使用你的方法,你如何建議我處理太多數據的積累? – JonathanC

+0

我不確定其他方法如何解決這個問題。無論哪種方式,圖像都得到保存並佔用內存。如果你想讓圖像可以在本地訪問,那麼沒有辦法解決這個問題。你可以創建一個臨時緩存,並且每次都掛在這些圖像上,而不需要保留它們,但是你必須每次都抓取它們。這可能是最好的解決方案,如果你希望有大量的圖像(如社交網絡應用程序) – Dima

+0

我相信我描述的方法允許操作系統清除緩存,如果它有點沉重。我有足夠多的照片,我不想堅持他們。儘管如此,我還沒有足夠的理由每次加載它們。我期待有一些離線功能。 – JonathanC