0

我有如下的 9x9 矩阵数组。我想将它作为游戏参数存储在本地的 iPhone 应用程序中。

int str2Darray[9][9] = { 

    {-1, -1, -1, 1, 1, 1, -1, -1, -1}, 
    {-1, -1, -1, 1, 1, 1, -1, -1, -1}, 
    {-1, -1, -1, 1, 1, 1, -1, -1, -1}, 
      {1, 1, 1, 1, 1, 1, 1, 1, 1}, 
      {1, 1, 1, 1, 0, 1, 1, 1, 1}, 
      {1, 1, 1, 1, 1, 1, 1, 1, 1}, 
    {-1, -1, -1, 1, 1, 1, -1, -1, -1}, 
    {-1, -1, -1, 1, 1, 1, -1, -1, -1}, 
    {-1, -1, -1, 1, 1, 1, -1, -1, -1}, 

};

是否可以将上述数组存储在.plist文件中?如果有的话,也请建议任何其他方式。

4

1 回答 1

1

您肯定不想将其存储在您的 Info.plist 中。正如已经说过的那样,这是关于您的应用程序的信息,而不是数据存储。而是在您的应用程序资源中放置一个单独的文件并将您的数据保存在其中。

您可以将数据转换为NSNumbersin的 2D 数组NSArrays并将其写入NSArray单独的 plist 文件,但这会产生很多开销。

相反,如果您已经知道数组的大小将始终为 9x9,我建议将数组传递给NSData对象并将其保存到文件中。

NSData *arrayData = [NSData dataWithBytes:str2Darray length:sizeof(int)*9*9];
[arrayData writeToFile:dataPath atomically:YES];

如果此数组表示您的游戏在任何时候的状态并且您想要保存它,以便用户在返回您的应用程序时可以继续,那么您应该将它保存到您的文档文件夹中。

NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
NSString *dataPath = [docPath stringByAppendingPathComponent:@"MyArrayData.txt"];

如果它代表关卡数据,或者您希望随游戏一起发布的游戏的启动配置,那么我建议您启动一个临时的简单的第二个项目。执行一次,获取保存的文件并将其放入您的项目资源中。

然后,您可以通过以下路径访问它:

NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"MyArrayData" ofType:@"txt"];
int length = sizeof(int)*9*9;
str2DArray = (int *)malloc(length); // Assuming str2Darray is an ivar or already defined.
NSData *arrayData = [NSData dataWithContentsOfFile:dataPath];
[arrayData getBytes:&str2Darray length:length];
于 2012-08-15T13:42:33.527 回答