كيفية تسجيل الإعدادات الافتراضية للمستخدم باستخدام NSUSERDEFAULTS دون الكتابة فوق القيم الحالية؟

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

سؤال

لدي فئة AppDelegate مع +(void)initialize الطريقة التي أستخدمها لتسجيل بعض الإعدادات الافتراضية. إليك الرمز الذي أستخدمه:

+ (void)initialize {
  NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];

  [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

لقد قمت أيضًا بإنشاء تفضيلات. xib التي تحمل اثنين من مربعات الاختيار (NSButton) تلك حالة عرض التفضيلات. هم ملزمون NSUserDefaultsController مع نفس المفاتيح (Fookey و Barkey في هذه الحالة). في كل مرة أقوم فيها بتشغيل تطبيق وتغيير "الإعدادات الافتراضية" التي يتم استعادتها على إطلاق التطبيق التالي.

هل هناك طريقة لتسجيل "الافتراضات الافتراضية" دون الكتابة فوق القيم الموجودة بالفعل؟ ربما في كل مرة أقوم فيها ببناء وتشغيل تطبيق يتم إعادة إنشاء ملف تفضيلاته؟ ربما يجب علي إلغاء ارتباط مربعات الاختيار من NSUserDefaultsController والحفاظ على قيم المفاتيح بنفسي مع بعض التعليمات البرمجية المخصصة في تفضيلات وحدة تحكم نافذة؟

أود أن أسمع تنفيذك المفضل للحفاظ على الإعدادات الافتراضية للمستخدم.

أنا أستخدم Mac OS X 10.6.2 و Xcode 3.2.1

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

المحلول

من الوثائق -registerDefaults: (تم اضافة التأكيدات):

لم تتم كتابة محتويات مجال التسجيل على القرص ؛ تحتاج إلى الاتصال بهذه الطريقة في كل مرة يبدأ فيها التطبيق الخاص بك. يمكنك وضع ملف PLIST في دليل موارد التطبيق واتصال RecordDefaults: مع المحتويات التي تقرأها من هذا الملف.

لذلك كان الرمز الخاص بك على المسار الصحيح. هذه هي الطريقة التي تسجل بها الافتراضات الافتراضية.

عادة ما أستخدم هذا في -applicationDidFinishLaunching::

// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];

إن استخدام Plist يجعل من السهل إضافة وتغيير الإعدادات الافتراضية في تطبيقك ، ويمنعك من ارتكاب خطأ الاستخدام @"NO" كقيمة أيضا.

تعديل: سريع 3 البديل:

 UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top