سؤال

والإصدار 1.0 من تطبيق لديها نموذج البيانات، التي يتم حفظها / تحميل باستخدام فئات أرشيفي NSKeyed (الامم المتحدة)، وتلتزم جميع الطبقات نموذج لبروتوكول NSCoding. يقول التسلسل التالي موجود:

-> Houses (NSMutableArray)
-> -> House (Custom Object)
-> -> -> Color (3 ints, RGB)
-> -> -> Number of Residents (int)

ويقول أن هناك ملفات إرث المخزنة في مثل هذه الطريقة، ولكن تحتاج إلى تحميلها في الإصدار 2.0 من التطبيق من أجل التوافق الى الوراء، وذلك باستخدام نموذج بيانات أحدث التالية:

-> Neighborhood (Maintains NSMutableArray, among other properties)
-> -> TownHouse
-> -> -> Color (3 ints, RGB)
-> -> -> Occupants (NSMutableArray)
-> -> (Other types of houses)

ومن الواضح أن بعض البيانات يكون في عداد المفقودين، وسوف تحتاج إلى ملئها. على سبيل المثال. سوف تحتاج إلى إنشاء كل من "عدد السكان" التي كانت موجودة قبل الأساسي "المحتل" وجوه. ما أنا أبحث عن طريقة لتحميل برمجيا في نموذج البيانات السابقة، وخاصة إذا كان لدي فقط قائمة الطبقات / التسلسل الهرمي، وليس. م /. ح ملفات أنفسهم.

وإذا ما أريد القيام به هو (على افتراض لدي ملف Houses.data، الذي كان تسلسل باستخدام مجموعة منازل):

NSFile *legacyFile;
Neighborhood *hood = [Neighborhood neighborhoodFromLegacyFile:legacyFile];

وأي أفكار؟

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

المحلول

وأعتقد أن الخدعة هنا هو استخدام setClass: forClassName: وظيفة توفرها NSKeyedUnarchiver. انها تسمح لك ليقول: "استخدم فئة تاون هاوس إلغاء تسلسل كافة مثيلات الفئة البيت"

وبعد ذلك تحتاج إلى تعديل initWithCoder تاون هاوس الخاص بك: وظيفة لفك إما التسلسل الهرمي. كنت قد يحققه هذا من خلال الدعوة decodeObject أو decodeObjectForKey: ثم استخدام isKindOfClass: لمعرفة ما نوع الكائن الذي نتعامل معه. يمكنك أيضا استخدام containsValueForKey: للتحقق من مفاتيح معينة قبل محاولة قراءتها خارج

وآمل أن يساعد!

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