كيف يمكنني تسلسل كائن إلى ملف باستخدام تنسيق nskeyedarchiver في تنسيق nspropertylistxmlformat_v1_0؟

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

سؤال

نأمل أن العنوان واضح بما فيه الكفاية. على أي حال، يبدو:

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];

يقتصر على ذلك NSPropertyListBinaryFormat_v1_0.

أحتاج إلى التنسيق لتكون مقروءة بشرية [حتى XML]. إذا كنت مهتما، فهذا جزء من المشروع، فسوف يتم وضعه في النهاية على Github مع منشور مدونات حول "كيفية اختبار تطبيقات GPS"

:-)

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

المحلول

يجب عليك استخدام NSPropertyListSerialization لتحويله. أساسا، على افتراض الكائن الذي تستسل إليه myObject ويتم تخزين الملف النهائي في myPath, ، سوف تستسسلها إلى XML باستخدام شيء مثل جزء التعليمات البرمجية التالية:

NSString *error = nil;
NSData *mySerializedObject = [NSKeyedArchiver archivedDataWithRootObject:myObject];
NSData *xmlData = [NSPropertyListSerialization dataFromPropertyList:mySerializedObject
                        format:NSPropertyListXMLFormat_v1_0
                        errorDescription:&error]:
if( xmlData ) {
    [xmlData writeToFile:myPath atomically:YES];
} else {
    NSLog(error);
    [error release];
}

نصائح أخرى

بدلا من استخدام طريقة الفصل، حاول إنشاء مثيل من NSKEyEdarchiver واستخدام setOutputFormat:NSPropertyListXMLFormat_v1_0 لتحديد تنسيق XML. الجانب السلبي الوحيد هو أنه سيأخذ بضعة خطوط إضافية من التعليمات البرمجية منذ التعامل مع التسلسل فعليا، فلن يعيد كائن NSDATA فقط في خطوة واحدة.

سيكون عليك ترميز فئة الكائن باستخدام الأسلوب - (الفراغ) Encodewithcoder (NSCoder *) Encoder {

[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];

}

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