إن حفظ مثيل لـ nsmanagedObjectContext لا يحفظ بشكل دائم سمة قابلة للتحويل قابلة للتحويل

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

سؤال

أنا أستخدم Core Data + SQLite كذاكرة التخزين المؤقت للبيانات. يقرأ التطبيق في ملف في البيانات الأساسية ، ثم يستخدم البيانات الأساسية لتشغيل التطبيق. يتم حفظها لكل من NSManagedObjectContext وإلى الملف. لقد لاحظت ، على الرغم من ذلك ، إذا تركت التطبيق وأعيد تحميله دون إعادة توزيع قاعدة بيانات البيانات الأساسية ، فإن بعض (ولكن ليس كل) من البيانات المحفوظة باستخدام -save: لا يتم حفظها في متجر البيانات.

يتم إجراء التغييرات على كائني المدارة في مجموعة واحدة على الموضوع الرئيسي ، مع إرسال رسالة: يتم إرسال الرسالة بعد اكتمال جميع التغييرات. البيانات التي لا يتم حفظها هي سمة قابلة للتحويل ، السمة الوحيدة القابلة للتحويل في كائن البيانات الأساسية. إليك الرمز الذي يحفظ الكائن:

    NSInteger columnIndex = [headers indexOfObject:questionID];
    if (NSNotFound != columnIndex) {

                    // parsedLine is a mutable array already
        NSMutableArray *parsedLine = person.dataFromFile.parsedLine;
        [parsedLine replaceObjectAtIndex:columnIndex withObject:answer];
        person.dataFromFile.parsedLine = parsedLine;

        person.questionsAnsweredByPerson = [NSNumber numberWithInt:[FileParser questionsAnsweredInRow:person.dataFromFile.parsedLine withRowHeaders:headers]];

        person.address.street.questionsAnsweredByPeopleOnStreet = [NSNumber numberWithInt:[self questionsAnsweredByPeopleOnStreet]];

        //NSLog(@"rawLineBefore:\n%@", person.dataFromFile.rawLine);
        person.dataFromFile.rawLine = [ReconstructCSV composeCSVLineFromArray:person.dataFromFile.parsedLine];
        //NSLog(@"rawLineAfter:\n%@", person.dataFromFile.rawLine);


        Voter_SurveyAppDelegate *appDelegate = (Voter_SurveyAppDelegate *)[[UIApplication sharedApplication] delegate];

        NSError *error;

        NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext];
        if (![managedObjectContext save:&error]) {
            // XXX inform the user there was a fatal error opening the file. Low disk space?
            NSLog(@"Unresolved error - could not save managedObjectContext - %@, %@", error, [error userInfo]);
            abort();
        }
        return YES;
    }

إحباط () ؛ لا يتم الاتصال به ، لذلك أفترض - يتم استدعاؤه بشكل صحيح.

أشك في أنه مرتبط ، ولكن بعد تشغيل هذا الرمز على الخيط الرئيسي ، أقوم بإجراء nsfetchrequest باستخدام nsmanagedobjectContext جديد على مؤشر ترابط مختلف. لا شيء آخر يحدث فيما يتعلق بالبيانات الأساسية على مؤشرات الترابط الأخرى.

لماذا لا يتم حفظ السمة القابلة للتحويل؟

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

المحلول

المشكلة هي أن الخصائص القابلة للتحويل لا تحب الكائنات القابلة للتغيير. كما لوحظ في إجابة هذا السؤال, ، لم يتم حفظ nsmutabletictionary. في حالتي ، كان nsmutablearray.

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