2013-10-15 71 views
5

這個網站的新品牌,非常有業餘知識!幾周前開始教我自己。有一個非常堅實的iPhone應用程序,但是我想實現的最後一個功能是能夠;iOS首次發佈遊戲 - 檢測應用程序是否首次推出

創建「僅首次發佈」導遊。

我想知道的是; 如果它是用戶第一次啓動應用程序,我怎樣才能將視圖重定向到一個新的視圖控制器,而不是按下按鈕的「初始視圖控制器」,全部以編程方式。

我讀了一些關於檢測首次啓動的教程,我明白了。 我也讀了一些教程,並嘗試在本書中的一切嘗試和實施「performSegueWithIdentifier」,但沒有任何工作對我來說!

也許是因爲我使用Xcode 5並在iOS 7上測試。 如果有人能幫助我,我會永遠感激!

(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLaunch"]) { 
    } 
    else { 
     // Place code here 
     self.view.backgroundColor = [UIColor redColor]; 

     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstLaunch"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    }  

    // Do any additional setup after loading the view, typically from a nib. 
} 
+0

你試過了什麼?也許向我們展示一些代碼。你試過的東西怎麼不起作用?更多細節你可以給,更好的裝備,我們將幫助你。 – neilco

+0

我添加到我的主要職位,我添加到我的viewcontroller.m文件。這工作正常,但我不太確定要在「// Place code here」部分中放置什麼來打開替代視圖控制器。 – Luke

+0

我也試圖創建一個segue,並通過將代碼放置在上面說的「//在此處放置代碼」的地方使用代碼以編程方式推送它; [self performSegueWithIdentifier:@「Tour」sender:self]; 我的segue被命名爲「Tour」 – Luke

回答

6

如果您還沒有註冊使用[[NSUserDefaults standardDefaults] registerDefaults:]任何違約,你第一次叫[[NSUserDefaults standardDefaults] boolForKey:@"FirstLaunch"],您將收到NO爲鍵不存在。

我更願意使用更多的語義鍵名,如hasPerformedFirstLaunch,那麼它檢查是否返回NO和執行第一啓動順序的問題:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasPerformedFirstLaunch"]) { 
     // On first launch, this block will execute 

     // Set the "hasPerformedFirstLaunch" key so this block won't execute again 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasPerformedFirstLaunch"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
    else { 
     // On subsequent launches, this block will execute 
    }  

    // Do any additional setup after loading the view, typically from a nib. 
} 
+0

對於代碼來說相對較新,這非常有用,能夠區分它和其他代碼很簡單,這是一個巨大的幫助。所以,現在我們已經建立了如何識別第一次啓動並保存這些信息,那麼如何以編程方式執行到另一個視圖控制器的切換?我試圖使用'performseguewithidentifier',但沒有任何反應! – Luke

+0

我沒有嘗試過,因爲我沒有多少使用故事板,但是你可能會有更好的運氣來做第一次啓動檢查並在'viewWillAppear:'中執行segue。 '執行SegueWithIdentifier:'應該工作。 – neilco

+0

我試過在viewWillAppear和viewDidLoad中使用,但沒有任何反應。它不會觸發任何東西! – Luke

1

這裏是一個導遊來源https://github.com/sofienazzouz/Guided-Tour,現在如果你想打電話給您的委託導遊,你應該稱呼它

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

//// initialize your initialViewController here however you want 
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"knewOrRecentUser"]) { 
     self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.initialViewController]; 
    } else { 
     [[NSUserDefaults standardUserDefaults] setObject:@"old" forKey:@"knewOrRecentUser"]; 
     GuidedTourViewController *guideTour = [[GuidedTourViewController alloc] init]; 
     self.navigationController = [[UINavigationController alloc] initWithRootViewController:guideTour]; 
    } 
[self.window setRootViewController:self.navigationController]; 
} 
1

neilco

您提供的功能確實有效,但您在第一次啓動APP時忽略了將屏幕變成紅色(或您喜歡的顏色)的代碼。

現在看起來可能不是很多,但是當一個新手確實冒險通過時,最好提供儘可能多的信息,以便我們甚至可以理解正在發生的事情。是的,包括我! < < =新手

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasPerformedFirstLaunch"]) { 
     // On first launch, this block will execute 
     // Place code here 
     self.view.backgroundColor = [UIColor redColor]; 

     // Set the "hasPerformedFirstLaunch" key so this block won't execute again 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasPerformedFirstLaunch"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
    else { 
     // On subsequent launches, this block will execute 
    } 

    // Do any additional setup after loading the view, typically from a nib. 
}