2008-11-21 13 views

उत्तर

80

सुंदर ज्यादा क्या मार्क और क्रिस ने कहा, हालांकि मैं मान बदलने के लिए पसंद करते हैं जब ऐप उस स्थिति के कई क्षेत्रों में निकलता है जो इसके बारे में जानना आवश्यक है। कोड में:

// -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"]; 
+1

क्या एप्लिकेशन को अनइंस्टॉल किया गया है जब अनुप्रयोग के साथ जुड़े डिफ़ॉल्ट डेटाबेस में प्रविष्टियां हैं? – xyzzycoder

+1

@xyzzycoder: yes –

+13

पृष्ठभूमि उपलब्ध होने के साथ, '-प्लिकेशंस विल्ट टर्मिनेट:' आमतौर पर उपयोगकर्ता को एप्लिकेशन छोड़ने पर कॉल नहीं किया जाता है। इसके बजाय '-plicationWillResignActive' कहा जाता है। तो पहले लॉन्च उन दोनों तरीकों से सेट किया जाना चाहिए। – memmons

2

आप इसे करने के लिए उपयोगकर्ता डिफ़ॉल्ट में एक बूलियन मान सेट कर सकते हैं। जब आप registerDefaults: पर कॉल करते हैं तो झूठी कुंजी को सेट करें, और फिर अपनी प्रारंभिक सहायता स्क्रीन या जो कुछ भी आपको करने की आवश्यकता है, उसके बाद इसे सही में बदलने के लिए इसे सही पर सेट करें।

यदि आपके पास एक सतत डेटा फ़ाइल है जो ऐप बंद होने के बाद हमेशा सहेजी जाती है, तो यह देखने के लिए जांचें कि यह मौजूद है या नहीं।

2
एक user preference, जैसे had_first_launch, स्टार्टअप पर सही पर सेट किया है, यह केवल पहली बार पर झूठे हो जाएगा के रूप में सहेज

...

29

मैं सामान्य रूप से एप्लिकेशन संस्करण संख्या के बजाय उपयोगकर्ता चूक में firstLaunch मूल्य के लिए एक बूलियन का उपयोग करें। इस तरह, आप एक नए इंस्टॉलेशन के पहले लॉन्च और अपग्रेड के पहले लॉन्च के बीच अंतर कर सकते हैं। भविष्य के संस्करणों में उपयोगी हो सकता है ...

59

मुझे पता है इस सवाल का काफी पुराना है, लेकिन मैं इसे इस्तेमाल किया एक "ताजा स्थापित" (बनाम पहले स्टार्टअप के बाद के बाद पहले स्टार्टअप का पता लगाने में एक विधि के साथ आने के लिए अपग्रेड/डाउनग्रेड) और सोचा कि अगर मैं सहायक हूं तो मैं भविष्य के दर्शकों के लिए यहां कोड साझा करूंगा।

// 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]; 
+0

मैं हमेशा "पहले लॉन्च के लिए जांच" कोड का उपयोग कर रहा हूं, इसलिए यह एक बढ़िया जोड़ा है! काम क्लिंट के लिए धन्यवाद! – nickthedude

+1

मैंने कभी अपग्रेड और डाउनग्रेड का पता लगाने का सोचा नहीं। +1। – JoePasq

+2

संस्करणों का ट्रैक रखने के लिए यह वास्तव में एक अच्छा तरीका है। – Ansari

2

यह ठीक से काम नहीं होगा यदि आप अपने पहले प्रक्षेपण करता है, तो कोड के अन्य स्थानों के दौरान पता लगाने के लिए चाहते हैं। Multitasking के कारण "applicationWillTerminate" आईओएस 4.0 से काम नहीं करेगा। http://mobiledevblog.metalcompass.com/?p=43

4

यह एक बहुत आसान शॉर्टकट है लेकिन मैंने पाया कि NSUserDefault कुंजी मान जोड़े के लिए पहली बार हमेशा शून्य हैं यदि आप किसी एप्लिकेशन तो

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

चलाने के लिए और यह कोड: इस लिंक एक अच्छा समाधान प्रदान करता है विज़ुअल नियंत्रक के जागने के FromNib में जो आपका एप्लिकेशन लॉन्च होने पर दिखाई देता है। मुझे नहीं पता कि कोई अन्य उत्तर आपकी समस्या के लिए काम करता है, लेकिन इस तरह मैंने इसे हल किया है।

संबंधित मुद्दे