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に保存したくないことは間違いありません。すでに述べたように、これはアプリに関する情報であり、データ ストレージではありません。代わりに、アプリのリソースに別のファイルを配置し、そこにデータを保存してください。

NSNumbersデータをinの 2D 配列に変換し、それを別の plist ファイルにNSArrays書き込むこともできますが、それは多くのオーバーヘッドになります。NSArray

代わりに、配列のサイズが常に 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"];

それがレベル データ、またはゲームと一緒に出荷したいゲームの開始構成を表している場合は、一時的な単純な 2 番目のプロジェクトを開始することをお勧めします。一度実行し、保存されたファイルを取得して、プロジェクト リソースに配置します。

その後、次のパスでアクセスできます。

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 に答える