我有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
文件中存储上面的数组?如果有的话,请另外建议。
答案 0 :(得分:1)
您肯定不希望将其存储在Info.plist中。正如已经说过的那样,这是关于您的应用程序的信息,而不是数据存储。而是在应用程序的资源中放置一个单独的文件,并将数据保存在那里。
您可以将数据转换为NSNumbers
中NSArrays
的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];