是否可以在info.plist中存储2D数组

时间:2012-08-15 13:28:36

标签: iphone objective-c xcode

我有9x9矩阵阵列如下。我想将它作为游戏参数存储在我的i​​Phone应用程序中。

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文件中存储上面的数组?如果有的话,请另外建议。

1 个答案:

答案 0 :(得分:1)

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

您可以将数据转换为NSNumbersNSArrays的2D数组,并将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];