Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从目标C中的NSBundle获取图像路径?_Objective C_Image_Core Data_Path_Nsbundle - Fatal编程技术网

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

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

我想在核心数据中存储大约60幅图像,其中30幅是头像,前缀为avt_filename_00X.png,其中30幅更小,前缀不同

我不想将所有图像作为blob存储在Core Data/SQLite中,而是希望存储找到的每个图像的路径(与存储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中找到图像的路径

  • 当应用程序位于设备上时,我如何确保路径有效

  • 其想法是将所有图像存储在一个数组中,然后稍后将它们推送到核心数据/SQLite

    我怎样才能确定这条路是正确的 当应用程序在设备上时是否工作


    这就是问题所在:你不能。最好让路径在运行中处理,或者只存储文件名。

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

    [[NSBundle mainBundle] pathForResource:@"avt_filename_00X" ofType:@"png"]
    
    (或者,如果希望在资源名称中包含扩展名,可以为“ofType”提供空字符串)

    但是文档中没有任何一个路径保证在设备、操作系统迭代等中保持不变。它是当前环境中从应用程序包到该文件的路径,保证仅在应用程序运行期间保持有效

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


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

    哦,我不知道这一点。我想你可以使用存储完整路径,然后使用它。如果我写它来存储文件名和文件路径,在使用它做任何事情之前,我需要检查它是否存在吗?当然,因为除了您自己的计算机之外,在其他任何地方正常工作的可能性都很小。例如,如果用户将应用程序放在其/Users/username/Applications文件夹中,则更改用户名将使存储的路径无效。是的,这是有意义的。我想我只需要将文件名存储在数据库中,然后在稍后阶段使用NSBundle代码重新获取图像。