1

plistを使用してNSMutableArrayを保存/ロードしています。

コード:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *prsPath = [documentsDirectory stringByAppendingPathComponent:@"records.plist"];

prs = [[NSMutableArray alloc] initWithContentsOfFile:prsPath];

コードの最後の文をコードの別の場所で使用している場合、「prsPath」は宣言されていません。(ViewDidLoadにコードをロードしています)オブジェクトを追加しても保存されず、表示されません。(追加時に最後の文をロードする)

4

2 に答える 2

3

私はこの方法を使用していますが、100%機能します

- (void) writeToPlist: (NSString*)fileName withData:(NSMutableArray *)data
{
     NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
     NSString *finalPath = [documentsDirectory stringByAppendingPathComponent:fileName];

     [data writeToFile:finalPath atomically: YES];
     /* This would change the firmware version in the plist to 1.1.1 by initing the NSDictionary with the plist, then changing the value of the string in the key "ProductVersion" to what you specified */
}

そして、plistファイルから読み取るためのこの方法:

- (NSMutableArray *) readFromPlist: (NSString *)fileName {
     NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
     NSString *finalPath = [documentsDirectory stringByAppendingPathComponent:fileName];

     BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:finalPath];

     if (fileExists) {
          NSMutableArray *arr = [[NSMutableArray alloc] initWithContentsOfFile:finalPath];
          return arr;
     } else {
          return nil;
     }
}

それがあなたを助けることができることを願っています。

于 2012-08-25T12:51:36.223 に答える
0

[[NSMutableArray alloc] initWithContentsOfFile:prsPath]plistをロードし、それを使用して配列を初期化します。そのパスにすでにplistが存在しますか?prsPathをログに記録して、正しいかどうかを確認することもできます。

通常、最初にを呼び出して、パスにplistが存在するかどうかを確認します[[NSFileManager defaultManager] fileExistsAtPath:prsPath]。そうでない場合は、空の配列を初期化します。

後でを呼び出して保存します[prs writeToFile:prsPath atomically:YES]

NSMutableArraysplistから初期化できないことに注意してください。plistからロードされた配列と辞書は、常に不変です。最初にplistをにロードしてから、そこからをNSArray初期化する必要があります。NSMutableArrayNSArray

于 2012-08-25T12:53:28.737 に答える