核心数据+ iCloud:iCloud存储仅增加不减少

时间:2015-12-23 01:25:06

标签: ios core-data icloud

我正在写一本带有iCloud + Core数据解析的日记应用程序。而我正在开发。我发现即使我尝试在我的应用程序中删除我的日记,iCloud Storage也只会增加。我使用的是一对多。一个是日记(标题,内容,......),其中很多是照片。起初,我用一些照片创建了一些diarys,然后我删除了一些照片。但iCloud存储只是增加而不是减少...... 在知道这个问题之后,我尝试关闭iCloud,将上下文切换到本地Core Date Store,我发现它没有我上面描述的问题。 我不知道为什么会这样。请帮我。谢谢。

以下是核心数据模型 enter image description here

当我在iCloud Store中删除照片时,以下是Core Data的SQL输出。

2015-12-23 09:10:27.991 LPDiary[749:215074] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZCONTENT, t0.ZDIARYID, t0.ZLOCATION, t0.ZNOTEPAPERNAME, t0.ZRESERVEBINARYDATA1, t0.ZRESERVEBINARYDATA2, t0.ZRESERVEDATE1, t0.ZRESERVEDATE2, t0.ZRESERVESTR1, t0.ZRESERVESTR2, t0.ZTYPE, t0.ZWEATHER, t0.ZWRITEDATE FROM ZLCLDIARY t0 WHERE  t0.ZDIARYID = ? ORDER BY t0.ZWRITEDATE DESC
2015-12-23 09:10:27.992 LPDiary[749:215074] CoreData: annotation: sql connection fetch time: 0.0009s
2015-12-23 09:10:27.992 LPDiary[749:215074] CoreData: annotation: total fetch execution time: 0.0013s for 1 rows.
2015-12-23 09:10:27.995 LPDiary[749:215074] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZIMAGEDATA, t0.ZORDER, t0.ZRESERVESTR1, t0.ZOWNER, t0.Z1PHOTOS FROM ZLCLPHOTO t0 WHERE  t0.Z_PK IN  (?)  
2015-12-23 09:10:27.997 LPDiary[749:215074] CoreData: annotation: sql connection fetch time: 0.0017s
2015-12-23 09:10:27.997 LPDiary[749:215074] CoreData: annotation: total fetch execution time: 0.0026s for 1 rows.
2015-12-23 09:10:28.000 LPDiary[749:215074] CoreData: sql: BEGIN EXCLUSIVE
2015-12-23 09:10:28.000 LPDiary[749:215074] CoreData: sql: DELETE FROM ZLCLPHOTO WHERE Z_PK = ? AND Z_OPT = ?
2015-12-23 09:10:28.007 LPDiary[749:215074] CoreData: sql: UPDATE ZLCLDIARY SET Z_OPT = ?  WHERE Z_PK = ? AND Z_OPT = ?
2015-12-23 09:10:28.008 LPDiary[749:215074] CoreData: sql: UPDATE Y_UBMETA set YPEERID="mobile~5C6B0588-0876-42C4-88CA-2FC85745ED66", YTRANSACTIONNUMBER=30 WHERE YPEERID="mobile~5C6B0588-0876-42C4-88CA-2FC85745ED66"
2015-12-23 09:10:28.046 LPDiary[749:215074] CoreData: sql: COMMIT
2015-12-23 09:10:28.061 LPDiary[749:215074] CoreData: sql: select YPEERID, YTRANSACTIONNUMBER, Y_PK from Y_UBMETA

1 个答案:

答案 0 :(得分:1)

核心数据没有 iCloud正如您所料。添加数据时,持久存储会变大,当您删除数据时,它会变小。

核心数据 with iCloud 的工作原理是创建基线数据存储,然后添加修改基线的事务日志。添加数据时,会出现一个新的事务,即添加数据。当您删除数据时,会出现一个删除数据的新事务。但事务并没有实际删除数据 - 它只是说应该删除数据,以便在重放事务时删除数据。

在某些时候,核心数据应该将所有交易压缩成新的基线。此时将删除已删除的数据。然而,Apple没有记录这种情况何时发生,我不确定它是否确实发生过。

这就是为什么您会看到不同的结果,具体取决于是否为核心数据启用了iCloud。