应用程序的 Documents 文件夹中的图像需要延迟表图像加载

Posted

技术标签:

【中文标题】应用程序的 Documents 文件夹中的图像需要延迟表图像加载【英文标题】:Need lazy table image load for images in app's Documents folder 【发布时间】:2011-04-09 17:16:34 【问题描述】:

我将图像放入我的 iPhone 应用程序的文档目录中。

我将它们加载到表中。但我希望它们加载为惰性表格图像。

我已经搜索了网络,但找到了从服务器加载图像的链接。如何从我的文档目录中加载它们?

我试过这个链接,但它对我不起作用:

Lazy load images for UITableViewCells from NSDocumentDirectory?

【问题讨论】:

【参考方案1】:

从服务器下载图像的工作解决方案可以轻松修改为从 NSDocumentsDirectory 加载。这是一个简单的实现,您可以将其创建为独立类或集成到现有类中。我没有包含 100% 的代码,只是输入了足以显示加载图像的内容。 imageLoader.h 需要定义一个协议,包括imageLoader:didLoadImage:forKey:_delegate_images 的iVars/properties。

// 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 框架和各种对象。如果您只是在寻找一个类的罐头实现,该类将图像从存储在您的应用程序文档目录中的文件远程加载到表中,您可能会在那里找到一些东西。我发布的代码可以工作,但需要集成到新的或现有的类实现中。我正在努力提供帮助,但我无法为您编写您的应用程序。祝你好运! @Julia,一点也不。对不起,如果我的评论听起来很苛刻。我的主要观点是有很多东西要学,我会确保你在深入了解你不了解的细节之前了解基础知识。当您在诸如 *** 之类的公共论坛上提问时,代表的经验水平范围很广。根据他们的沟通,判断某人的位置并不难。我的评论是出于尊重。我认为你潜入并想要学习是很棒的。我们曾经都是菜鸟。

以上是关于应用程序的 Documents 文件夹中的图像需要延迟表图像加载的主要内容,如果未能解决你的问题,请参考以下文章

如何通过加密保护 Documents 目录中的数据?

文件夹中的 Three20 图像

iOS - 将特定图像从捆绑资源路径复制到 Documents Dir

将文件夹移动到 Documents 目录

通过 iTunes 从 App 的 Documents 目录访问文件夹

React Native iOS 从应用程序 Documents 文件夹中读取图像