Objective c 从目标C中的NSBundle获取图像路径?
我想在核心数据中存储大约60幅图像,其中30幅是头像,前缀为avt_filename_00X.png,其中30幅更小,前缀不同 我不想将所有图像作为blob存储在Core Data/SQLite中,而是希望存储找到的每个图像的路径(与存储MySQL数据库的图像路径的方式相同) 但是,我不知道如何获取NSBundle中的图像路径 我可以通过以下方式获取NSDocumentDirectory的路径:Objective c 从目标C中的NSBundle获取图像路径?,objective-c,image,core-data,path,nsbundle,Objective C,Image,Core Data,Path,Nsbundle,我想在核心数据中存储大约60幅图像,其中30幅是头像,前缀为avt_filename_00X.png,其中30幅更小,前缀不同 我不想将所有图像作为blob存储在Core Data/SQLite中,而是希望存储找到的每个图像的路径(与存储MySQL数据库的图像路径的方式相同) 但是,我不知道如何获取NSBundle中的图像路径 我可以通过以下方式获取NSDocumentDirectory的路径: NSArray *paths = NSSearchPathForDirectoriesInDomai
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 mainBundle] pathForResource:@"avt_filename_00X" ofType:@"png"]
(或者,如果希望在资源名称中包含扩展名,可以为“ofType”提供空字符串)
但是文档中没有任何一个路径保证在设备、操作系统迭代等中保持不变。它是当前环境中从应用程序包到该文件的路径,保证仅在应用程序运行期间保持有效
因为到应用程序的路径,以及到它的资源的路径,不能保证保持不变,所以我认为以任何方式将它放在SQL数据库中都是明显不安全的
您是否可以采用这样一种方案,即以/开头的文件名是一个完整的路径,一个开头没有/的文件名被假定在包中,这意味着您可以在数据库外部应用逻辑?哦,我不知道这一点。我想你可以使用存储完整路径,然后使用它。如果我写它来存储文件名和文件路径,在使用它做任何事情之前,我需要检查它是否存在吗?当然,因为除了您自己的计算机之外,在其他任何地方正常工作的可能性都很小。例如,如果用户将应用程序放在其/Users/username/Applications文件夹中,则更改用户名将使存储的路径无效。是的,这是有意义的。我想我只需要将文件名存储在数据库中,然后在稍后阶段使用NSBundle代码重新获取图像。