iOS / Swift / دليل حلول تحريري
تشخيص تعديلات SwiftData الظاهرة غير المحفوظة
افصل تتبع السياق وهوية الحاوية ونتائج الحفظ والترحيل قبل تعديل البيانات المحفوظة.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
يظهر العنوان المعدل فورا ثم يختفي بعد إعادة الفتح، أو لا يعيد الجلب سجلات متوقعة.
يتحول فشل الحفظ إلى إعلان نجاح عام، أو يتراجع محرر مؤقت عن تغييرات غير مرتبطة عند الإلغاء.
افهم الأسباب المحتملة
- قد تبقى التغييرات في الذاكرة حتى يكتبها السياق، وقد يستخدم العرض حاوية أو إعدادا غير مقصود.
- قد يحوي السياق تعديلات تدفقات متعددة. وقد يخفي عرض الكائن نفسه اختلاف المخطط أو الترحيل أو خطأ حفظ مبتلعا.
سجّل نطاق الحفظ الفعلي
حدّد الحاوية التي تعرف المخطط وهل إعدادها ذاكرة أم دائم وأي سياق تستقبله الواجهة. تأكد من ربطها بالنطاق الصحيح ولا تعتبر العثور على سياق إثباتا للحفظ. استخدم معرّفات وعلامات إعداد آمنة. لا تحذف مخزنا حقيقيا لجعل الجلب نظيفا. يختلف عدم تطابق الحاوية من فشل الحفظ، وقد يمحو تغييرهما معا إعادة الإنتاج.
راقب قبول الحفظ لا التعديل المرئي فقط
قد تتحدث الواجهة قبل نجاح الحفظ. حدّد حدث إعلان الحفظ وراقب نتيجته الصريحة أو سياسة الحفظ التلقائي اللازمة. يوضح المقتطف حد القبول في سياق مقدم ولا ينشئ قاعدة. دع الخطأ يصل إلى مالك يحفظ المسودة ويقدم تعافيا. قد تخفي try? الخطأ بينما تستمر الواجهة بقراءة غير المحفوظ.
import SwiftData
@MainActor
func confirmPendingSave(_ context: ModelContext) throws {
guard context.hasChanges else { return }
try context.save()
}
A save error propagates instead of being converted to confirmed success.
يتطلب بيئة SwiftData مصرح بها وسياقا صحيحا. لم يُفتح مخزن أو يُحفظ هنا.
اجعل إلغاء المسودة أضيق من التراجع المشترك
افحص هل يستدعي الإلغاء rollback لسياق يحوي تعديلات شاشة أخرى، فيسقط أكثر من المقصود. فضّل مسودة قيمة واعتمادا صريحا أو تصميم معاملة محدودا يناسب العلاقات. اختبر الإلغاء بتعديلين غير مرتبطين لا نموذج واحد. ولا تنقل النماذج المدارة بحرية بين الممثلين والسياقات؛ مرّر هويات أو لقطات وحلها في النطاق المستقبل. لا تُسكت تشخيص النقل بتأكيدات غير متحققة.
عامل تطور المخطط كعمل استرداد
إذا بدأ الفشل بعد تغير النموذج فاحفظ العينة وقارن المخططات والترحيل المدعوم. ميّز غلاف مسودة معيبا من فشل ترحيل مخزن. يُختبر ترحيل الغلاف نقيا دون SwiftData، وتختبر حاوية الذاكرة جزءا فقط. يستحق عمل المستخدم سياسة استرداد مراجعة لا حذفا غير مشروط. احفظ عينات قديمة لإثبات المعنى والثوابت والعلاقات لا مجرد غياب الاستثناء.
تحقق من نجاح الإصلاح
افحص في SDK معزول متوافق المخطط والحاوية ونجاح الحفظ وفشله وجلبا جديدا بالنطاق الصحيح وحفظ العمل الآخر عند الإلغاء.
يحتاج التعافي بعد البدء وترحيل العينات الدائمة إلى تكامل مصرح مستقل. لم تُشغّل قاعدة جهاز أو مخزن حقيقي أو ترحيل أو SDK للدليل.
امنع تكرار المشكلة
- وثّق ملكية النموذج والحاوية والسياق وحد تأكيد الحفظ. ضيّق الإلغاء واحفظ عينات المخططات وأبلغ عن الذاكرة منفصلة عن إعادة البدء الدائمة.