2013-05-27 48 views
0

我已經構建了一個包含IAPIn App Purchase)的應用程序。該應用程序使用UINavigationController構建。當用戶決定購買內容時,解鎖功能解鎖內容。用戶然後點擊後退按鈕,然後他們被帶回到主菜單,然後他們可以訪問應用程序的其餘部分。所有這些工作正常。解鎖UINavigationController中的內容

我的問題是,當用戶轉到UINavigationController的一部分解鎖的viewController,然後返回到主菜單頁面,應用程序已清除了用戶已購買解鎖內容和(我假設)使用在初始主菜單viewControllerviewDidLoad方法中設置的property.enabled = no;屬性在主頁重新加載時重新鎖定內容。

所以,我的問題是,如何讓應用知道用戶已購買應用內內容,並在用戶偏離主菜單頁面後保持內容解鎖?

我在想,也許我可以在mainMenuViewController中聲明BOOL appPurchased;。然後從新解鎖的viewControllers中,包含一個prepareForSegueMethod,它將BOOL設置爲YES,這將依次啓用if語句中的購買內容。

事情是這樣的:

  1. mainMenuViewController.m聲明BOOL appPurchased;@implementation

  2. 實施mainMenuViewController.m下面的方法:

(void) viewWillAppear:(BOOL)animated { 
    if (appPurchased) { 
     [self enableLockedContent]; 
    } else if (!appPurchased){ 
     nil; 
    }  
} 
  1. UnlockedContentViewController,實施下面的方法被連接到一個UIButton
(IBAction)toMainMenu:(id)sender { 
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *mainMenu = [mainStoryboard instantiateViewControllerWithIdentifier:@"cover"]; 
    [self.navigationController pushViewController:mainMenu animated:YES]; 
} 

我不能找出如何在上述(IBAction)toMainMenu:(id)sender方法寫MainMenuViewController.appPurchase =YES;

這種配置發送BOOL值返回到mainViewController接近工作的任何地方?有沒有更好的辦法? (NSUserDefaults的可能?)

- (IBAction)toMainMenu:(id)sender { 
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" 
                  bundle:nil]; 
    MainMenuViewController *mainMenu = (MainMenuViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"cover"]; 
    mainMenu.appPurchase = YES; 
    [self.navigationController pushViewController:mainMenu animated:YES]; 
} 

你也可以堅持某處購買信息,並:

+0

如何使用恢復購買功能的非消耗品? http://stackoverflow.com/questions/7761556/restore-already-bought-in-app-purchases-on-iphone –

+0

我不希望用戶每次回到主菜單時都必須恢復內容。我需要找到一種方法,讓內容始終保持解鎖狀態,除非設備被關閉或類似的東西。 – RunnerGirl

回答

1

你可以投你的UIViewController是一個MainMenuViewController(然後你就可以設置appPurchase屬性) MainMenuViewController自己檢索這些信息(在init或者viewDidLoad方法上)。

+0

謝謝。我讓它和我認爲類似的東西一起工作。我在MainMenuViewController中聲明作爲BOOL屬性而不是實例變量,然後我可以使用我寧願按照你的建議堅持數據。我認爲這將是更好,更專業的方式,但不知道如何去做。 再次感謝 – RunnerGirl

+0

布魯諾 - 我與你的代碼工作在另一種情況下,我都需要與MainMenuVC於塞克和發送相同的信息(appPurchased = YES;)一個XIB文件,因爲我不能用ifIdentifierIsEqualTo到egue的廈門國際銀行,我與您的版本,而不是我的。它完美無缺地工作!我會回去將其他ViewController更改爲您的代碼,因爲它更簡潔,更清晰。百萬感謝您的幫助! – RunnerGirl

+0

@RunnerGirl,不客氣! :) –