سؤال

مرحبًا يا شباب، أواجه مشكلات مع NSUserDefaults ولا أفهم تمامًا ما يحدث

يحتوي تطبيقي على 5 مستويات وكل مستوى يفعل نفس الشيء تمامًا مع NSUserDefaults (استرداد الإعدادات الافتراضية للمستويات وتغيير القيمة عندما يلعب المستخدم المستوى ثم يقوم بتعيين الإعدادات الافتراضية والمزامنة في نهاية المستوى) المستويات الأربعة الأولى. .العمل دون وجود عوائق ولكن المستوى الأخير لا يحفظ القيم.لا يتعطل التطبيق والمستوى الأخير ليس هو آخر شيء يحدث، بل إنني أقوم بمزامنة الإعدادات الافتراضية عند إنهاء التطبيق.هل هناك حد أقصى لحجم NSUserDefaults أم أن هناك أي شيء يمكن لأي شخص أن يفكر فيه ولم أفعله، سأقوم بنشر الكود أدناه ولكن كما قلت فإن المستويات الأربعة الأولى تعمل بشكل مثالي

//header
NSUserDefaults *userData;


@property(nonatomic,retain) NSUserDefaults *userData;


//class file
//Sets the boolean variables for the class to use
userData = [NSUserDefaults standardUserDefaults];
boolOne = [userData boolForKey:@"LevelFiveBoolOne"];
boolTwo = [userData boolForKey:@"LevelFiveBoolTwo"];
boolThree = [userData boolForKey:@"LevelFiveBoolThree"];
boolFour = [userData boolForKey:@"LevelFiveBoolFour"];
boolFive = [userData boolForKey:@"LevelFiveBoolFive"];
boolSix = [userData boolForKey:@"LevelFiveBoolSix"];
boolSeven = [userData boolForKey:@"LevelFiveBoolSeven"];

//End Of Level
[userData setBool:boolOne forKey:@"LevelFiveBoolOne"];
[userData setBool:boolTwo forKey:@"LevelFiveBoolTwo"];
[userData setBool:boolThree forKey:@"LevelFiveBoolThree"];
[userData setBool:boolFour forKey:@"LevelFiveBoolFour"];
[userData setBool:boolFive forKey:@"LevelFiveBoolFive"];
[userData setBool:boolSix forKey:@"LevelFiveBoolSix"];
[userData setBool:boolSeven forKey:@"LevelFiveBoolSeven"];
[userData synchronize];

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

لقد حدقت في هذا الأمر لفترة طويلة وآمل أن يكون هناك شخص ما قد واجه نفس المشكلة ويمكن أن يقدم لي بعض الأفكار حول كيفية حلها.

شكرا لك مقدما BWC

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

المحلول

وNSUserDefaults قد لا تكون هناك فرصة لإنقاذ اعتمادا على كيفية إنهاء العملية.

وهذه الإجابة لديه المزيد من المعلومات: لماذا لا NSUserDefaults توفير قيمي ؟

نصائح أخرى

فقط في حالة مرور شخص ما عبر هذا:عند تخزين NSDictionary أو NSArray (أو متقلب كائنات كلاهما) في الإعدادات الافتراضية للمستخدم ولديهما NSURL الكائن المُخزن، لن يتم حفظ البيانات على synchonize!

وفي مكان ما لديك شيء من هذا القبيل:

// load the default values for the user defaults
userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" ofType:@"plist"];
userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath];

// set them in the standard user defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];

إذا الافتراضات الأولية التي تقوم بإعدادها لا يكون التخلف LevelFive، ثم ستفشل المكالمات.

وتحقق قيمة الإرجاع من -synchronize عن الأخطاء.

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

وشكرا للمساعدة

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