是否有可能将二维数组存储在info.plist中
问题描述:
我有9x9矩阵数组如下。我想将它作为游戏参数存储在我的iPhone应用程序中。是否有可能将二维数组存储在info.plist中
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
文件中?如果有的话,请提出任何其他方式。
答
你当然不想将它存储在你的Info.plist中。正如已经说过的那样,这是关于你的应用程序的信息,而不是数据存储。而是在您的应用程序资源中放入一个单独的文件并将数据保存在那里。
您可以将您的数据转换成的二维数组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];
您省略更难猜测有点...获取数据了。 '[data getBytes:&str2Darray length:data.length];' – 2012-08-15 13:53:52
对,我忘记了,谢谢。我更新了我的帖子。 – DrummerB 2012-08-15 13:58:49
这真的很有用..谢谢 – Dhaval 2014-02-15 06:41:16