سؤال

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

لدي بعض التعليمات البرمجية نفسي ولكن لا يعمل.

appDelegate.ح - استرجاع البيانات

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      NSData *dat = [defaults objectForKey:@"theKey"];
      tmpArray  = [[NSMutableArray alloc] init];
      tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];

      [self.window makeKeyAndVisible];
      [window addSubview:tabBarController.view];
      return YES;
}

appDelegate.ح - تخزين البيانات

- (void)applicationWillTerminate:(UIApplication *)application {

      [self saveContext];
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
      NSData *dat = [NSKeyedArchiver archivedDataWithRootObject:tmpArray];
      [defaults setObject:dat forKey:@"theKey"];
}

نعم هو صفيف ، ولكن سوف تحتاج إلى واحد على NSMutableDictionary.

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

المحلول

مناقشة applicationWillTerminate:

للتطبيقات التي لا تدعم خلفية إعدام أو ترتبط ضد دائرة الرقابة الداخلية 3.x أو في وقت سابق هذا الأسلوب يسمى دائما عندما يقوم المستخدم إنهاء التطبيق. للتطبيقات التي تدعم خلفية تنفيذ هذا الأسلوب عموما لا يسمى عند إنهاء المستخدم التطبيق لأن التطبيق ببساطة ينتقل إلى الخلفية في هذه الحالة. ومع ذلك ، قد يكون هذا الأسلوب يسمى في الحالات حيث يتم تشغيل التطبيق في الخلفية (لا تعليق) و يحتاج النظام إلى إنهاء ذلك لسبب ما.

لحفظ كائن يجب وضع الكود الخاص بك في applicationDidEnterBackground: أيضا.

في دائرة الرقابة الداخلية 4.0 أو في وقت لاحق ، ويسمى هذا الأسلوب بدلا من applicationWillTerminate:طريقة عند إنهاء المستخدم التطبيق الذي يدعم الخلفية التنفيذ.يجب عليك استخدام هذا الأسلوب إلى الإفراج عن الموارد المشتركة ، حفظ بيانات المستخدم ، يبطل توقيت و تخزين ما يكفي من التطبيق معلومات الدولة لاستعادة التطبيق الخاص بك إلى حالته الحالية في حالة إنهائه في وقت لاحق. يجب عليك أيضا تعطيل التحديثات إلى التطبيق الخاص بك واجهة المستخدم تجنب استخدام بعض أنواع تقاسم موارد النظام (مثل جهات اتصال المستخدم قاعدة البيانات).ومن الضروري أيضا تجنب استخدام OpenGL ES في الخلفية.


حفظ القاموس بدلا من صفيف ببساطة استبدال كافة تواجدات مجموعة مع القاموس


و إصلاح تسرب

tmpArray  = [[NSMutableArray alloc] init]; // not used, not released but `alloc`ed.
tmpArray = [NSKeyedUnarchiver unarchiveObjectWithData:dat];

عن طريق إزالة السطر الأول.

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