سؤال

هل WritetoFile: Atomically، أضف بيانات إلى موجودة .plist؟ هل من الممكن تعديل قيمة في .plist؟ هل يجب إعادة ترجمة التطبيق لتفعيل التغيير؟

لدي قائمة مخصصة .plist في تطبيقي. الهيكل هو على النحو التالي:

<array>
<dict>
    <key>Title</key>
    <string>MyTitle</string>
    <key>Measurement</key>
    <dict>
        <key>prop1</key>
        <real>28.86392</real>
        <key>prop2</key>
        <real>75.12451</real>
    </dict>
    <key>Distance</key>
    <dict>
        <key>prop3</key>
        <real>37.49229</real>
        <key>prop4</key>
        <real>58.64502</real>
    </dict>
</dict>
</array>

تحمل علامة الصفيف عناصر متعددة بنفس البنية. أحتاج إلى إضافة عناصر إلى القائمة الحالية. هل هذا ممكن؟ يمكنني كتابة UIView للقيام بذلك، إذا كان الأمر كذلك.

* Edit - OK، لقد حاولت فقط أن WritetoFile على أمل أن يصرخ على الأقل إذا لم يكن إضافيا إليه. بغرابة، يختار التعليمات البرمجية التالية مسارا مختلفا أثناء القراءة والكتابة.

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

الملف .plist في مشروعي. أستطيع أن أقرأ منه. عندما أكتب إليها، فإنه يقوم بإنشاء ملف .plist وحفظه في بلدي /users/.../library/! هل هذا يعقل أن أي شخص؟

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

المحلول

أود أن أفترض أن plist يأتي مع التطبيق مع التطبيق read only - إنه داخل حزمة التطبيق.

يتم تخزين أي تحديثات في دليل المستخدم الخاص بالمستخدم، بحيث يكون لكل مستخدم تعديلات خاصة به.

نصائح أخرى

بالطبع يمكنك إنشاء وكتابة ملف .plist الخاص بك. بواسطة NSArray *arrayPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *userFile=[[arrayPath objectAtIndex:0] stringByAppendingString:@"/whatever.plist"]; ، يمكنك كتابة / تحريرها.

ولكن لدي نفس السؤال: كيف يمكنني تعديل القيمة مقابل مفتاح معين، بدلا من الكتابة فوق ملف .plist كله؟

على سبيل المثال إذا أردت تغيير قيمة "mytitle" للمفتاح "العنوان" في: <key>Title</key> <string>MyTitle</string> إلى "عباد الشمس"، كيف يمكنني أن أفعل ذلك من التعليمات البرمجية؟

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