Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
核心数据:简单的、静态的基于UITableView的iPhone应用程序的杀伤力过高?_Iphone_Objective C_Uitableview_Core Data - Fatal编程技术网

核心数据:简单的、静态的基于UITableView的iPhone应用程序的杀伤力过高?

核心数据:简单的、静态的基于UITableView的iPhone应用程序的杀伤力过高?,iphone,objective-c,uitableview,core-data,Iphone,Objective C,Uitableview,Core Data,我有一个相当简单的iPhone应用程序,由许多视图组成,其中包含一个单独的分组表视图。这些视图保存在导航控制器中,导航控制器分组在选项卡栏中。简单的东西 我的表视图只做列表文本(如“Dog”、“Cat”和“Weasel”),这些数据来自一组plist。也许还值得一提的是,这些表是“静态”的,因为它们的数据是预先确定的,只有在这样的情况下,开发人员才会修改它们(在本例中是moi) 不过,这种基本的方法已经达到了极限,我想我需要一些更相关的东西。在过去,我对核心数据做过一些研究,但仅限于数据由用户输

我有一个相当简单的iPhone应用程序,由许多视图组成,其中包含一个单独的分组表视图。这些视图保存在导航控制器中,导航控制器分组在选项卡栏中。简单的东西

我的表视图只做列表文本(如“Dog”、“Cat”和“Weasel”),这些数据来自一组plist。也许还值得一提的是,这些表是“静态”的,因为它们的数据是预先确定的,只有在这样的情况下,开发人员才会修改它们(在本例中是moi)

不过,这种基本的方法已经达到了极限,我想我需要一些更相关的东西。在过去,我对核心数据做过一些研究,但仅限于数据由用户输入决定的应用程序

我有四个密切相关的问题:

  • 对于一个主要由一些简单的表视图组成的应用程序来说,核心数据是否过度使用了
  • 您是否建议使用核心数据来管理预先确定且极不可能更改的数据
  • 是否可以锁定核心数据,使其数据不会更改,从而放弃我作为开发人员处理托管对象上下文的编辑和保存的责任
  • 我如何将预先确定的数据以我知道可以使用的格式提供给核心数据

  • 谢谢一群人。

    你可以直接考虑使用SQLite API,而不是核心数据,因为这样可以更容易地预填充数据库。您可以在任何平台(Mac、Windows、Linux)上创建和修改SQLite数据库,并将其作为资源复制到应用程序包中

    您可以找到通过从应用程序包中复制SQLite数据库来创建用户数据库的教程/示例。在您的情况下,您可以只使用捆绑包中的一个。请确保以只读方式打开它。

    您应该阅读

    这篇文章的两大要点:

    我打赌核心数据在95%的情况下都是正确的。或者更多。很容易相处。它很快(在大多数情况下)

    以及:

    (规则:始终以尽可能高的级别工作。)


    我建议您坚持使用plist,因为您的数据很少会发生更改,而且当数据发生更改时,它将由开发人员驱动

  • 核心数据功能非常强大,但要使其正常工作,您需要设置适量的管道和基础设施
  • Core Data将其应用商店放在应用捆绑包之外(因为它必须在iPhone上运行),因此所有新安装都需要在第一次运行时将数据加载到应用商店中。无论如何,这些数据可能都必须存储为资源plist,因此您不会省去生成这些plist的麻烦。事实证明并非如此,您可以将持久存储的只读部分存储在应用程序包中

  • 因为我也不知道你到底遇到了什么样的限制,核心数据可能是解决方案,但我猜不会。如果对象关系是您处理的最大困难,那么您应该仔细阅读,将整个对象树存储在一个表单中,该表单可以轻松地保存为捆绑包中的资源,并在必要时重新创建。

    答案很简单。如果不需要持久化为过时的格式(如MSWord等),那么应该使用核心数据。原始SQLite是一个令人头痛的问题,99.999%的时间不值得付出努力

    核心数据比PLIST更高效,并且在项目不断发展的情况下允许更大的灵活性

    使用OSX机器预填充核心数据sqlite文件也非常容易;您知道,首先用于开发应用程序的机器:)


    NNW的用例是这条规则的一个独特例外,如果我是一个赌徒,我打赌会引起核心数据团队的注意,并将在未来的更新中得到纠正。顺便说一下,如果您使用核心数据,您将免费获得更新。

    我建议使用纯SQLite。它更简单,更易于维护,并且您可以使用许多流行的GUI编辑器在非mac系统上构建数据库。对我来说,使用核心数据仍然是一种痛苦。从静态SQlite数据库填充TableView的代码简单、直观且透明,虽然核心数据需要更多的样板代码,而这些代码一开始你甚至都不完全理解,而且总体上有很多隐藏的复杂性,而你并不真正需要。

    因为你已经在使用OS X来编写iPhone应用程序,所以预填充参数是有缺陷的。编写一个核心数据桌面应用程序来预填充数据,这绝非易事。SQLite太复杂了,除了NNW依赖于数据来自何处之外,在任何情况下都无法在核心数据上使用它。并非所有数据都是在OS X机器上开始使用的。我不同意写一个Mac OS X Core data桌面应用程序来管理他的数据是“微不足道的”,特别是当我们不知道这些数据是什么样子的时候。通过Perl或Python脚本填充数据库可能更容易,在这种情况下,SQLite可能更容易。在不知道问题到底在做什么的情况下,我不明白为什么有人会声称核心数据绝对是一个优秀的解决方案。核心数据可以使用应用程序包中的只读数据。它甚至可以将应用程序包中的一部分存储设置为只读,将文档目录中的另一部分设置为读写。没有理由对核心数据使用对象归档。我删除了第2点,但第1点仍然有效。调用
    archiveRootObject:toFile:
    unarchiveObjectWithFile:
    将比设置模型、托管对象、持久存储等简单得多。不过,您在回答中提出的要点可能胜过我的第一个理由。你赢了这一轮,Zarra。我不明白iPhone开发人员怎么会说当t