2010-04-05 9 views
6

मैं ऐप शुरू होने के बाद पॉप-अप होने के लिए UIAlertView का उपयोग कर रहा हूं। यह ठीक काम करता है लेकिन मैं केवल ऐप के पहले स्टार्ट-अप पर पॉप अप दिखाना चाहता हूं। इस समय मुझे कक्षा में विधि में UIAlertView मिला है। यहां मेरा कोड है:मैं एक आईफोन ऐप के पहले स्टार्ट-अप पर केवल एक बार UIAlertView कैसे दिखूं?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
sleep(4); 
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome!" message:@"SAMPLE!!!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 

मैं ऐप विकास के लिए नया हूं इसलिए क्षमा करें अगर यह आसान है।

उत्तर

3

एक NSUserDefault का उपयोग करें जो प्रारंभ में 0 पर सेट है और जिसे आप पहली बार अलर्ट दिखाने के बाद 1 पर सेट करते हैं।

//default value is 0 
[settings registerDefaults:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:@"HAVE_SHOWN_REMINDER"]]; 
    BOOL haveShownReminder = [settings boolForKey:@"HAVE_SHOWN_REMINDER"]; 
    if (!haveShownReminder) 
{ 
    //show your alert 

    //set it to 1 
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:1] forKey:@"HAVE_SHOWN_REMINDER"];  
} 
+1

पर चर्चा नहीं' registerDefaults है? – zoul

4
- (void) displayWelcomeScreen 
{ 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSString *alreadyRun = @"already-run"; 
    if ([prefs boolForKey:alreadyRun]) 
     return; 
    [prefs setBool:YES forKey:alreadyRun]; 
    UIAlertView *alert = [[UIAlertView alloc] 
     initWithTitle:@"…" 
     message:@"…" 
     delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
    [alert show]; 
    [alert release]; 
} 
10

निर्धारित करने के लिए एप्लिकेशन पहली बार चलाया जाता है कि क्या आप इस जानकारी स्टोर करने के लिए लगातार चर की आवश्यकता है। NSUserDefaults इन सरल विन्यास मूल्यों को स्टोर करने का सबसे अच्छा तरीका है।

उदाहरण के लिए,

-(BOOL)application:(UIApplication *)application … { 
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
    if (! [defaults boolForKey:@"notFirstRun"]) { 
     // display alert... 
     [defaults setBool:YES forKey:@"notFirstRun"]; 
    } 
    // rest of initialization ... 
} 

यहाँ, [defaults boolForKey:@"notFirstRun"] config से notFirstRun नामित एक बूलियन मान पढ़ता है। ये मान NO के लिए प्रारंभ किए गए हैं। तो यदि यह मान नहीं है, तो हम if शाखा निष्पादित करते हैं और अलर्ट प्रदर्शित करते हैं।

ऐसा करने के बाद, हम इस बूलियन मान को YES में बदलने के लिए [defaults setBool:YES forKey:@"notFirstRun"] का उपयोग करते हैं, इसलिए if शाखा को कभी भी निष्पादित नहीं किया जाएगा (मान लें कि उपयोगकर्ता ऐप को नहीं हटाता है)।

1

जैसा कि उपर्युक्त समाधान ज्यादातर मामलों में काम करना चाहिए, मैं आपको समय पर इस बिंदु पर भी जागरूक रखना चाहता हूं।

ऐप्पल दस्तावेज़ कहता है: NSUserDefaults क्लास वर्तमान में प्रति-होस्ट प्राथमिकताओं का समर्थन नहीं करता है। ऐसा करने के लिए, आपको CFPreferences API का उपयोग करना होगा। `अतिरिक्त: रेफरी NSUserDefaults

और यह here

2

3 सरल रेखाओं

-(BOOL)application:(UIApplication *)applicationBlahBlah { 
    if(![[[NSUserDefaults standardUserDefaults] objectForKey:@"NOT_FIRST_TIME"] boolValue]) 
    { 
     [[[[UIAlertView alloc] initWithTitle:nil message:@"message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] autorelease] show]; 
     [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:@"NOT_FIRST_TIME"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
} 
+0

ऐसा करने में कोई समस्या नहीं है लेकिन आप ध्वज सेट करने के लिए सीधे बूल का उपयोग कर सकते हैं। – rptwsthi

+0

आसान महसूस करें कि मैं NSNumber ऑब्जेक्ट्स के साथ काम कर रहा हूं। कुछ बूल मूल्य नहीं – comonitos

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