7

我有大约 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
}

但是,我不确定的是:

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

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

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

4

2 回答 2

26

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

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

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

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

因为不能保证应用程序的路径以及其资源的路径保持不变,所以我认为以任何方式将其放入 SQL 数据库显然是不安全的。

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

于 2010-10-28T16:17:43.493 回答
2

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

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

于 2010-10-28T16:12:49.727 回答