我想在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
}
但是,我不确定的是:
如何获取计算机在NSBundle内部找到图像的路径?
当应用在设备上时,如何确定路径是否有效?
我们的想法是将所有图像存储在一个数组中,然后将它们推送到Core Data / SQLite。
答案 0 :(得分:25)
获取主包中资源的完整路径的正确方法是:
[[NSBundle mainBundle] pathForResource:@"avt_filename_00X" ofType:@"png"]
(或者,如果您希望在资源名称中包含扩展名,则可以为'ofType'提供空字符串)
但是在文档中没有任何地方保证在设备,操作系统迭代等之间保持相同的路径。它是当前环境中应用程序包中该文件的路径,保证在此运行期间保持有效仅适用于该应用程序。
由于应用程序的路径以及资源的路径不能保证保持不变,我认为以任何方式将它放在SQL数据库中显然是不安全的。
您是否可以采用一种方案,其中以/开头的文件名是完整路径,假设在开始时没有/的文件在包中,这意味着您可以在数据库外部应用逻辑? / p>
答案 1 :(得分:2)
其中有瑕疵:你不能。您最好让这些路径即时处理,也许只是存储文件名。我怎样才能确定路径会如何 当应用程序在设备上时工作?