從服務器下載影像的工作解決方案可以輕鬆地工作被修改爲從NSDocumentsDirectory加載。這是一個簡單的實現,你可以創建一個獨立的類或集成到一個現有的類。我沒有包括100%的代碼,只是放在足以顯示加載圖像。 imageLoader.h
需要定義一個協議,包括imageLoader:didLoadImage:forKey:
以及_delegate
和_images
的iVars /屬性。
// imageLoader.m
// assumes that that images are cached in memory in an NSDictionary
- (UIImage *)imageForKey:(NSString *)key
{
// check if we already have the image in memory
UImage *image = [_images objectForKey:key];
// if we don't have an image:
// 1) start a background task to load an image from available sources
// 2) return a default image to display while loading
if (!image) {
// this is the simplest example of background execution
// if you need more control use NSOperationQueue or Grand Central Dispatch
[self performSelectorInBackground:@selector(loadImageForKey) withObject:key];
image = [self defaultImage];
}
return image;
}
// attempts to load an image from available sources and notifies the delegate when done
- (void)loadImageForKey:(NSString *)key
{
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
// attempt to load the image from a file
UIImage *image = [UIImage imageWithContentsOfFile:[self imagePathForKey]];
// if no image, attempt to load the image from an URL here if desired
// if no image, return default or notFound image
if (!image) {
image = [self notFoundImage];
}
if ([_delegate respondsTo:@selector(imageLoader:didLoadImage:ForKey:)]) {
// this message will be sent on the same thread as loadImageForKey
// you can either modify this to send the message on the main thread
// or ensure the delegate does any desired UI changes on the main thread
[_delegate imageLoader:self didLoadImage:image forKey:key];
}
[pool release];
}
// returns a path to the image in NSDocumentDirectory
- (NSString)imagePathForKey:(NSString *)key
{
NSString *path;
// your implementation here
return path;
}
如果你不明白我寫的東西,那麼這有點兒超出了小菜鳥的範圍。您需要熟悉Objective-c概念和設計模式。您還需要了解iOS框架和各種對象。如果您只是尋找一個可以從應用程序文檔目錄中存儲的文件中遠程加載圖像到表格中的類的實現,那麼您可能可以在其中找到某些內容。我發佈的代碼可以工作,但需要集成到新的或現有的類實現中。我正在嘗試提供幫助,但我無法爲您編寫應用程序。祝你好運! – XJones 2011-04-10 22:24:01
@Julia,根本沒有。對不起,如果我的評論遇到了苛刻的。我的主要觀點是有很多東西需要學習,我會確保你在深入瞭解你不明白的細節之前瞭解基本原理。當你在像stackoverflow這樣的公共論壇上提問時,有很多代表的經驗水平。根據他們的溝通來確定某人的位置並不難。我的評論意味着所有的尊重。我認爲你潛入並想學習是件好事。我們都是小菜一次。 – XJones 2011-04-11 17:41:23