كيف يمكنني تسلسل كائن إلى ملف باستخدام تنسيق nskeyedarchiver في تنسيق nspropertylistxmlformat_v1_0؟
-
05-09-2019 - |
سؤال
نأمل أن العنوان واضح بما فيه الكفاية. على أي حال، يبدو:
[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"];
}