从Objective C中的NSBundle获取图像路径?

Posted

技术标签:

【中文标题】从Objective C中的NSBundle获取图像路径?【英文标题】:Get image paths from NSBundle in Objective C? 【发布时间】:2011-05-01 22:58:45 【问题描述】:

我有大约 60 张图片要存储在 Core Data 中,其中 30 张是头像,前缀为 avt_filename_00X.png,其中 30 张较小且前缀不同。

我不想将所有图像存储为 Core Data/SQLite 中的 BLOB,而是存储找到的每个图像的路径(与存储 mysql 数据库的图像路径相同)。

但是我不确定如何获取在 NSBundle 中找到的图像路径。

我可以通过以下方式获取到 NSDocumentDirectory 的路径:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager fileExistsAtPath:documentsDirectory];

NSLog(@"documentsDirectory = %@", documentsDirectory);

我可以加载图像并将其添加到数组中。

if (qty == 0)

    //NSLog(@"fileToLoad = %@", fileToLoad);

    UIImage *img = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileToLoad ofType:fileExt]];

    [self.avtList addObject:img];

    [img release];

 else 

    // load multiple image into an array
    // not coded yet

但是,我不确定的是:

    如何获取计算机在 NSBundle 中找到图像的路径?

    当应用程序在设备上时,我如何确保路径可以正常工作?

我们的想法是将所有图像存储在一个数组中,然后稍后将它们推送到 Core Data/SQLite。

【问题讨论】:

【参考方案1】:

我怎样才能确定路径会 当应用在设备上时工作?

问题就在这里:你不能。您最好让路径被即时处理,也许只存储文件名。

【讨论】:

哦,我不知道。我认为您可以使用存储完整路径然后使用它。如果我写它来存储文件名和文件路径,我是否需要在对其进行任何操作之前检查它是否存在? 当然可以,因为除了您自己的计算机之外,它在其他任何地方正常工作的可能性非常小。例如,如果用户将应用程序放在他们的 /Users/username/Applications 文件夹中,那么更改用户名将使存储的路径变得无用。【参考方案2】:

在主包中获取资源完整路径的正确方法是:

[[NSBundle mainBundle] pathForResource:@"avt_filename_00X" ofType:@"png"]

(如果您希望在资源名称中包含扩展名,也可以为“ofType”提供空字符串)

但文档中没有任何地方保证在设备、操作系统迭代等之间保持相同的路径。它是从当前环境中的应用程序包到该文件的路径,保证在此运行期间保持有效仅限应用程序。

由于不能保证应用程序及其资源的路径保持不变,我认为无论如何将其放在 SQL 数据库中都是不安全的。

您是否可以采用一种方案,其中以 / 开头的文件名是完整路径,假设开头没有 / 的文件名在捆绑包中,这意味着您可以在数据库外部应用逻辑?

【讨论】:

是的,这是有道理的。我想我只是将文件名存储在数据库中,然后在稍后阶段使用您的 NSBundle 代码来获取图像。

以上是关于从Objective C中的NSBundle获取图像路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iOS 9 和 Objective C 中的 .MOV 文件中获取缩略图?

Objective-C 中的 NSBundle 沙盒

如何从 Objective C 中的 NSDictionary 获取键值?

从Objective C中的json对象获取值? [关闭]

如何从 Objective C、iOS 中的 NSUserDefaults 获取准确数据?

如何从Objective c中的UITableView获取UILabel的多个值