如何存储永久数据

时间:2014-07-07 06:37:00

标签: ios objective-c in-app-purchase plist

我是iOS开发新手,遇到以下问题。

说明: 我有一个由几个迷你游戏组成的应用程序。每个迷你游戏都可以通过应用程序购买。但是迷你游戏的可用性保存在BOOL变量中,如下所示:

 _miniGamesArray = [[NSMutableArray alloc] init]; 
 NSMutableDictionary *mutDictMg0 = [NSMutableDictionary dictionaryWithCapacity:3];
 [mutDictMg0 setValue:[self.gameAvailabilityMutableArray objectAtIndex:0] forKey:@"GameAvailable"];
[_miniGamesArray addObject:mutDictMg0];

问题:

每次启动应用时,都会从self.gameAvailabilityMutableArray检查游戏的可用性,该- (NSMutableArray *)gameAvailabilityMutableArray { if (!_gameAvailabilityMutableArray) { //[_gameAvailabilityMutableArray addObjectsFromArray:@[@1,@0,@0,@0 ,@0,@0,@0,@0]]; _gameAvailabilityMutableArray = [[NSMutableArray alloc] initWithArray:@[@1,@1,@1,@1 ,@1,@1,@1,@1]]; } return _gameAvailabilityMutableArray; } 设置为:

 @[@1,@1,@0,@0    ,@0,@0,@0,@0]]

当客户购买迷你游戏时,我希望将数组设置为(示例):

{{1}}

试验解决方案: 我试图通过调用iTunes服务器并写入数据来实现该阵列。但是,收到请求的时间比应用程序加载时间长。第二个问题是,如果没有互联网连接,则应用程序崩溃。

我也尝试过使用.plist文件。我不知道为什么,但写入plist文件不会一直改变它的比赛!有时候它有效,有时它不会...有时候应用程序会正确加载值,有时它会将它们与最后的值混合。

问题:

有没有办法存储应用加载到plists旁边时正在检查的永久应用数据?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码将数据保存在NSUserDefaults中:

       [[NSUserDefaults standardUserDefaults] setObject:_gameAvailabilityMutableArray forKey:@"gameArray"];
       [[NSUserDefaults standardUserDefaults] synchronise];

您可以使用

检索数组

_gameAvailabilityMutableArray = [[NSUserDefaults standardUserDefaults] objectForKey:@“gameArray”];

答案 1 :(得分:1)

  save your data in NSUserDefaults.then use below conditions for app start first time or handle another conditions.

 BOOL iSFirstTime = [[NSUserDefaults standardUserDefaults] boolForKey:@"AppStartFirstTime"];
    if (!iSFirstTime) {
        NSLog(@"Application start first time");
        [[NSUserDefaults standardUserDefaults] setValue:@"ImgDownloaded" forKey:@"ProductIDDef"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AppStartFirstTime"];
    }else{
        //   NSLog(@"we are here");
        if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"ProductIDDef"] isEqualToString:@"ImgDownloaded"]) {
            NSLog(@"All transaction and Image Downloading has been perform successfully");
        }else{
//If any network problem or any thing else then handle here.
        }

    }

}