Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.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
在iOS中存储应用程序内图像的最佳选项_Ios - Fatal编程技术网

在iOS中存储应用程序内图像的最佳选项

在iOS中存储应用程序内图像的最佳选项,ios,Ios,首先,我应该承认,我对iOS编程一无所知,我想为一个我整天在谷歌上搜索的问题找到答案。 我将有一个应用程序,其中将包含近500个png格式的图像与较小的大小。如何在应用程序中按类别存储这些图像?据我所知 我可以创建一个plist并用字符串映射图像(但如果数据变得巨大,许多人不建议这样做) 创建手动文件夹并存储图像(不确定如何执行此操作) 我看过很多关于如何从网络甚至相机上下载和保存图像的代码,但不确定什么是将我手头的应用程序内图像存储在应用程序中的最佳方式。任何关于示例代码的建议都会非常有用。您

首先,我应该承认,我对iOS编程一无所知,我想为一个我整天在谷歌上搜索的问题找到答案。 我将有一个应用程序,其中将包含近500个png格式的图像与较小的大小。如何在应用程序中按类别存储这些图像?据我所知

  • 我可以创建一个plist并用字符串映射图像(但如果数据变得巨大,许多人不建议这样做)
  • 创建手动文件夹并存储图像(不确定如何执行此操作)

  • 我看过很多关于如何从网络甚至相机上下载和保存图像的代码,但不确定什么是将我手头的应用程序内图像存储在应用程序中的最佳方式。任何关于示例代码的建议都会非常有用。

    您正在下载图像吗?这些形象会改变吗?每个图像都有很多元数据吗(您提到过按类别存储它们)

    虽然这不是实现它的唯一方法,但我很幸运地使用CoreData模型实现了类似的事情,该模型具有一个
    图像
    实体,属性为
    类别
    文件名
    。您可以将图像存储在
    NSBundle
    或任何您喜欢的地方,只要它们位于同一目录中,这样对您来说就更方便了。然后确保每个文件名都是唯一的,并正确映射到
    CoreData
    实体

    这也允许您随时发送更多图像,甚至替换它们。下载新图像后,无需更新任何plist或映射即可将新实体添加到
    CoreData
    。您还可以通过CoreData fetchRequest访问NSPredicates,这将允许您在CoreData中查询属于一个类别甚至多个类别的图像

    缺点是它需要额外的设置,即学习CoreData并将其实施到项目中

    编辑:

    对于现在做一些非常基本的事情来说,答案很容易实现。将文件夹添加到您的目录中,并确保它们具有bundle中的target/目标。从那里,添加一个pList,为每个类别列出您感兴趣的每个图像的文件名

    然后,当他们在应用程序中单击某个类别时,你拉拽plist并获取名称列表,该列表可以是字典或数组。然后加载所有图像


    这样做的缺点是,您必须手动更新plist以获取任何新的更改,并将其从服务器发送到手机。

    该应用程序有自己的文档目录。我会把它储存在那里。你不会得到一个答案,因为没有答案。也没有一条路可走。这完全取决于您的所有要求,我可以再添加至少20种方法。你真的应该弄清楚你需要什么,然后从那里开始。@Fogmeister,这只有在图像被预先打包的情况下才会起作用。如果它们来自web或相机资源目录,则不可选择。@rckoenes True。啊。。。刚才看到了关于“下载并保存”的部分。那样的话。。。不使用资源目录:D@rckoenes:谢谢你的回答。基本上我会有10个文件夹的图像(每个文件夹有50个图像)。我只需要显示在网格视图这些。Grid view将显示10个项目,单击一个项目,将显示内部存储的50个图像。我曾考虑使用asset,但我不知道这是否是一个好的选择。将来,将从web下载两个或三个文件夹。因此,基本上我不知道如何在应用程序中适应这一点。你说过你有20种方法可以做到这一点,请让我知道一种方法可以用来存储在文件夹中。不需要密码,只要给我指出正确的方向。谢谢你的建议。我们肯定会查看核心数据。但如果我下载并存储图像,这会很有帮助。我手上的问题是,我有一组图像,需要知道如何将其放入应用程序中。资产和plist映射会是一个好的选择吗?很多人都说,事实并非如此。。我现在需要一个可行的方法将图像放到应用程序中。。有什么建议吗?在我看来,资产和plist映射是一种不好的方法。对于对图像所做的任何添加,都必须更新plist映射。这是一种快捷方式,比实现CoreData要快,但如果您需要在这条路上进行更改,则必须始终更新映射。例如,如果您推出了一个具有新图像的更新,那么您还必须推出一个新的plist。您所做的每一次更新都会发生这种情况。这是一种先做正确的事情,或是把事情赶出去的权衡。。那么,可行的选择是什么呢?我已经为您提供了一个可行的长期工作解决方案,它将自动为将来的更新工作。这实际上取决于您将如何长期使用此代码。任何好的解决方案都需要时间来完成,但听起来你想要一个现在就可以投入使用的解决方案,并且尽可能少的工作。如果是这样,plist将起作用,并且只有在不更改图像(添加到/删除自)的情况下,plist才是一个好的解决方案。即使您确实更改了图像,这仍然是一个可行的解决方案。我已经编辑了我的答案,以展示如何使用plist进行编辑。感谢更新。但是,我不想要一个快速的解决方案。未来的更新不应该触及代码,这也是我的意图。我会按照你的建议调查核心数据。