Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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
Iphone 如何重置核心数据中的主键计数/最大值?_Iphone_Objective C_Cocoa_Core Data - Fatal编程技术网

Iphone 如何重置核心数据中的主键计数/最大值?

Iphone 如何重置核心数据中的主键计数/最大值?,iphone,objective-c,cocoa,core-data,Iphone,Objective C,Cocoa,Core Data,我已经设法删除了使用核心数据存储的所有实体(如下) 问题是,我注意到主键仍在向上计数。是否有方法(无需手动编写SQL查询)重置实体的Z_MAX值?下面的截图阐明了我的意思 值本身不是问题,但我只是担心将来某个时候可能会达到最大整数,我不希望发生这种情况。我的应用程序将数据与web服务同步,并使用核心数据缓存数据,因此主键一次可能会增加数百/数千。删除整个Sqlite数据库不是一个选项,因为我需要为其他实体保留一些信息 我见过“reset”方法,但这肯定会重置整个Sqlite DB吗?如何仅为这一

我已经设法删除了使用核心数据存储的所有实体(如下)

问题是,我注意到主键仍在向上计数。是否有方法(无需手动编写SQL查询)重置实体的Z_MAX值?下面的截图阐明了我的意思

值本身不是问题,但我只是担心将来某个时候可能会达到最大整数,我不希望发生这种情况。我的应用程序将数据与web服务同步,并使用核心数据缓存数据,因此主键一次可能会增加数百/数千。删除整个Sqlite数据库不是一个选项,因为我需要为其他实体保留一些信息

我见过“reset”方法,但这肯定会重置整个Sqlite DB吗?如何仅为这一组实体重置主键?与我要重置的主键的其他实体没有关系

我只是担心在某个时候 将来可能会出现最大整数 我不希望这件事发生 发生

真的吗?您的主键是什么类型的?因为如果它不是Int16,你真的不需要关心它。有符号32位整数给出2147483647个值。64位有符号整数为您提供9223372036854775807值

如果您认为您将要用完所有这些,那么您可能需要担心比整数溢出更重要的事情

更重要的是,如果您使用的是核心数据,则不需要关心或真正使用主键。核心数据不是一个数据库——当使用核心数据时,你应该使用关系,而不是真正关心主键。核心数据并不真正需要它们。

来自sqlite常见问题解答:

如果是可能的最大整数键, 9223372036854775807,然后是未使用的 键值是随机选择的

9223372036854775807/(1024^4)=8388608千兆瓦行。我怀疑你会先遇到其他限制。:)查看您将遇到的更实际的限制

询问sqlite3关于方便的核心数据存储的信息会产生:

sqlite> .schema zbookmark
CREATE TABLE ZBOOKMARK ( Z_PK INTEGER PRIMARY KEY, ...
注意缺少“autoincrement”,这在sqlite中意味着永远不要重用密钥。所以,核心数据确实允许重用旧密钥,所以即使您能够随着时间的推移添加(和删除其中的大部分)那么多行,您也非常安全


如果你真的想重新设置它,那么在苹果的z_表中翻找是唯一的方法。[这是不是说这是事实上你应该做的事情。这不是(至少在你想要发布的任何代码中),即使它看起来有效。]

除了直接/手动编辑核心数据存储是一个非常愚蠢的想法之外,正确的答案是:

删除数据库并重新创建它

当然,这样做会丢失所有数据,但如果你对这一小部分数据那么担心,那没关系,对吧


哦,核心数据将确保没有主键冲突。

核心数据使用64位整数主键。除非I/O系统比CPU快很多数量级,这与CPU不同,它们近年来没有,否则您可以尽可能快地节省数百万年的时间

用完后,请向bugreport.apple.com提交一个bug


您不能直接编辑核心数据SQLite(或任何)存储。实施细节不公开,随时可能更改。这是个坏主意。呃,对不起。是的,不必说,违反核心数据的抽象障碍完全是个人的风险。你付你钱,你冒风险。