2015-09-25 17 views
6

.DeleteSelfはどのように実際に動作しますか?ドキュメントは言う:参照オブジェクトのアクションが CKReferenceActionDeleteSelf、参照、参照のレコードIDソースレコードの所有者 プロパティが-なりに保存されている 記録であるのターゲットに設定されているCKReference .DeleteSelf属性は無効です

。ターゲット(所有者)レコードを削除すると、すべての ソースレコードが削除されます。

しかし、私の印象は、ターゲットを削除しても必ずソースが削除されるとは限りません。そして、それがコンテナに残っていると、クライアントがそれをダウンロードし、参照ポイントがどこかにあると期待しますが、クライアントにサーバーデータストアのスライスを構築するときにターゲットが存在しないと、

このケースをどのように扱いますか?あなたはそのようなレコードを無視しますか?または定期的にCloudKitストレージを検索し、破損したレコードを検索して削除しますか?

または、レコードを削除する代わりに、削除された状態の属性をデータベースに保存する方がよいでしょうか?

+0

あなたは.DeleteSelfに頼ることができるはずです。うまくいかない場合は、http://bugreport.apple.comでバグレポートを作成する必要があります。このバグの回避策を作成したい場合や、レコードその同じ瞬間にすべての関連レコードを手動で削除するのが最善であると私は思っています。 –

+0

また、.DeleteSelfで断続的な動作が見られます –

+0

私はこの問題を抱えています。私はマスターテーブルと1対多の関係を持ついくつかのテーブルを持っています。パブリックデータベースでは、マスタレコードを追加してから、他のテーブルにレコードを追加します。これが1人のユーザーからすべて実行され、他のユーザーがデータにアクセスすることさえできない場合は、マスターレコードを削除すると、他のすべてのレコードが期待どおりに削除されます。しかし、いったん別のユーザーがデータにアクセスすると、カスケード削除は行われず、マスターレコードだけが削除されます。あなたがこの機能に頼ることができない場合は無意味に見えます。 – rmaddy

答えて

0

CloudKit Dashboardから削除する場合は、参照のもう一方の端をチェックするためにレコードタイプを切り替える前に待機する必要があります。削除が実際に起こる前に切り替えた可能性があります。 [ネットワーク]タブのSafariのWebインスペクタを使用して、削除が実際に終了したときを確認できます。複数のレコードを削除するには非常に時間がかかります。

1

それは基本的に許可の問題です...

を私はしばらくの間、このいずれかで苦労し、私は私の調査結果を共有するだろうと思いました。カスケード削除は、レコードを削除したユーザーが、削除が必要なすべてのレコードに対して「書き込み」権限を持っている場合にのみ機能します。 CloudKitダッシュボードでは、カスケード削除は開発者のiCloudアカウントで作成されたレコードに対してのみ機能します。

ユーザーが削除したレコードを削除する必要がある場合は、[セキュリティ]の[レコードの種類]に「書き込み」権限を追加できます。

enter image description here

+0

私のレコードは同じユーザーによって作成された同じゾーンにあり、参照は削除されません。私はそれがCloudKit Dashboardのバグだと思う。そして、はい、それはまだ2017年後半に起こっています。:) –

関連する問題