كشف عندما يتم تشغيل التطبيق دائرة الرقابة الداخلية لأول مرة؟ [مغلق]

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

سؤال

وكيف يمكنني كشف عندما يتم تشغيل التطبيق دائرة الرقابة الداخلية لأول مرة؟

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

المحلول

وجميلة كثيرا ما قال مارك وكريس، على الرغم من أنني يفضلون تغيير قيمة عند إنهاء التطبيق في حال كنت هناك مجالات متعددة من التطبيق الذي تحتاج لمعرفته حول هذا الموضوع. في التعليمات البرمجية:

// -applicationDidFinishLaunching:
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
// to check it:
[[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"];
// -applicationWillTerminate:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];

نصائح أخرى

وأنا أدرك هذا السؤال هو قديمة جدا، ولكن كنت عليه من أجل التوصل إلى <م> واحدة طريقة للكشف عن بدء التشغيل الأول بعد "تركيب جديد" (مقابل بدء التشغيل الأول بعد ترقية / تخفيض) واعتقدت أن حصة الشفرة هنا للمشاهدين في المستقبل في حال فإنه من المفيد.

// Get current version ("Bundle Version") from the default Info.plist file
NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"];
if (prevStartupVersions == nil) 
{
    // Starting up for first time with NO pre-existing installs (e.g., fresh 
    // install of some version)
    [self firstStartAfterFreshInstall];
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"];
}
else
{
    if (![prevStartupVersions containsObject:currentVersion]) 
    {
        // Starting up for first time with this version of the app. This
        // means a different version of the app was alread installed once 
        // and started.
        [self firstStartAfterUpgradeDowngrade];
        NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions];
        [updatedPrevStartVersions addObject:currentVersion];
        [[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"];
    }
}

// Save changes to disk
[[NSUserDefaults standardUserDefaults] synchronize];

وأنا عادة استخدام رقم إصدار التطبيق بدلا من منطقية لقيمة firstLaunch في التخلف المستخدم. بهذه الطريقة، يمكنك التمييز بين أول إطلاق لتثبيت جديد وإطلاق أول ترقية. قد تكون مفيدة في الإصدارات المستقبلية ...

وهذا هو اختصار بسيط حقا ولكن وجدت أن NSUserDefault أزواج قيمة المفتاح دائما فارغة المرة الأولى التي تقوم بتشغيل التطبيق لذلك

// Check to see if its the first time
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) {
   [[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"];
}

وووضع هذا الرمز في awakeFromNib وحدة تحكم الرأي التي تظهر عند إطلاق التطبيق الخاص بك. أنا لا أعرف إذا كان أي من الإجابات الأخرى العمل لمشكلتك، ولكن هذه هي الطريقة I حلها.

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

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

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

وهذا لن تعمل بشكل صحيح إذا كنت ترغب في الكشف خلال أماكن أخرى من قانون إذا الأول من إطلاقه. و"applicationWillTerminate" لن تعمل من دائرة الرقابة الداخلية 4.0 نظرا لتعدد المهام. هذا الرابط يوفر حلا جيدا: http://mobiledevblog.metalcompass.com/؟p=43

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