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

zar*_*don 7 image core-data path objective-c nsbundle

我想在Core Data中存储大约60张图像,其中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);
Run Code Online (Sandbox Code Playgroud)

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

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
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定的是:

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

  2. 当应用程序在设备上时,如何确定路径是否有效?

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

Tom*_*mmy 25

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

[[NSBundle mainBundle] pathForResource:@"avt_filename_00X" ofType:@"png"]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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