سياق البيانات الأساسية "القذرة": تطبيق MOC حفظ التطبيق

StackOverflow https://stackoverflow.com/questions/2234359

سؤال

جديد إلى حد ما إلى فون ديف. يستخدم تطبيقي البيانات الأساسية، وفي نقطة واحدة أحاول حفظ بعض البيانات أثناء طريقة nsfetchedresultscontrollerdlegate:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
   atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
  newIndexPath:(NSIndexPath *)newIndexPath {

أحصل على معظم هذا الحق من وثائق أبل حول هذا الموضوع. يشبه إجراء الحذف بذلك:

case NSFetchedResultsChangeDelete:
        [managedObjectContext deleteObject:anObject];
        NSError *error;
        if (![managedObjectContext save:&error]) {
            NSLog(@"WTF? %@", [error description]);
        }
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationFade];
        break;

الآن، عند القيام بذلك، سيتم حذف الكائن المعني بعد التعطل الذي لا مفر منه. لذلك يحدث شيء صحيح. الحادث مثير للاهتمام، على الرغم من:

خطأ في تطبيق خطير. تم اكتشاف استثناء أثناء معالجة تغيير البيانات الأساسية: فشل في معالجة التغييرات المعلقة قبل الحفظ. السياق لا يزال قذرا بعد 100 محاولة. عادة ما يحدث هذا القذيق المتكرر بطريقة سيئة التحقق من الصحة أو -Willsave أو معالج الإعلام. مع userinfo (null)

2010-02-09 23: 02: 02: 02: 03.931 App2 [26664: 207] *** إنهاء التطبيق بسبب الاستثناء غير المدقق "NSINTERNALINCOSSISCOSEXICE '، السبب:' فشل في معالجة التغييرات المعلقة قبل الحفظ. السياق لا يزال قذرا بعد 100 محاولة. عادة ما يحدث هذا القذيق المتكرر من خلال طريقة التحقق السيئة أو -Willsave أو معالج الإعلام.

أصبح بحثي بعض النتائج المحدودة للغاية - شيء جيد لدي هنا لتوثيق هذا، إيه؟ :-) ولكن بلدي القناة الهادئة يقولون أن MOC مكتوبا إلى مكان آخر في جهاز التحكم الخاص بي، على الرغم من أنني لا أجد أي دليل على حدوث ذلك. تتمتع طريقة DIADIDLOAD في NSFetchedResultScontroller لاستخدامها للحصول على البيانات الأولية، ولكن هذا كل شيء.

أي اقتراحات حول ما قد يكون مخطئا هنا؟ كالعادة، فإن عقلك الخليه المجتمعي الخاص بك هو موضع تقدير كبير!

هتافات، هارون

هل كانت مفيدة؟

المحلول

(إذا فهمت المشكلة بشكل صحيح) أعتقد أن كل ما عليك القيام به في هذه الحالة هو:

case NSFetchedResultsChangeDelete:

        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationFade];
        break;

تذكر أن هذه الطريقة

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath 

يتم إعلامك بعد تغير البيانات الأساسية. لذلك أعتقد أن جسمك محذوف بالفعل، لا تحتاج إلى حذفه يدويا. كل ما تبقى له في هذه الطريقة يتم إزالته من الجدول ".

أتمنى أن يساعدك هذا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top