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

时间:2010-10-28 15:25:42

标签: objective-c image core-data path 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);

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

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. 当应用在设备上时,如何确定路径是否有效?

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

2 个答案:

答案 0 :(得分:25)

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

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

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

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

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

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

答案 1 :(得分:2)

  

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

其中有瑕疵:你不能。您最好让这些路径即时处理,也许只是存储文件名。