0

たとえば、値を .plist ファイルにそのまま書き込むことができることを理解しています

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"stored" ofType:@"plist"];
NSString *comment = @"this is a comment"; 
[comment writeToFile:filePath atomically:YES];

しかし、たとえば .plist (gameArray) 内にcomment配列があり、配列の特定のインデックスに白くしたい場合gameArray[4]。どうすればいいですか?

明確にさせてください

  • 私はplistを持っています:stored.plist
  • 私のplistの中には配列がありますgameArray
  • gameArrayplist 内の特定のインデックスを更新したいのですが、これは可能ですか?
4

2 に答える 2

0

「stored.plist」の内容が配列であると仮定すると、パスから変更可能な配列をインスタンス化する必要があります。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"stored" ofType:@"plist"];
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:filePath];
NSString *comment = @"this is a comment"; 

// inserting a new object:
[array insertObject:comment atIndex:4];

// replacing an existing object:
// classic obj-c syntax
[array replaceObjectAtIndex:4 withObject:4];        
// obj-c literal syntax:
array[4] = comment;

// Cannot save to plist inside your document bundle.
// Save a copy inside ~/Library/Application Support

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] objectAtIndex:0];
NSURL *arrayURL = [documentsURL URLByAppendingPathComponent:[filePath lastPathComponent]];
[array writeToURL:arrayURL atomically:NO];
于 2012-10-09T10:15:16.273 に答える
0

次のように、ドキュメント ディレクトリまたは他のディレクトリで行う必要がある代わりに、アプリケーションのメイン バンドルでデータを更新して保存することはできません。

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

if([[NSFileManager defaultManager] fileExistsAtPAth:plistFilePath]) 
{//already exits

   NSMutableArray *data = [NSMutableArray arrayWithContentsOfFile:plistFilePath];
   //update your array here
   NSString *comment = @"this is a comment";
   [data replaceObjectAtIndex:4 withObject:comment];

   //write file here
   [data writeToFile:plistFilePath atomically:YES];
}
else{ //firstly take content from plist and then write file document directory 

 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"stored" ofType:@"plist"];
 NSMutableArray *data = [NSMutableArray arrayWithContentsOfFile:plistPath];
 //update your array here
   NSString *comment = @"this is a comment";
   [data replaceObjectAtIndex:4 withObject:comment];

   //write file here
   [data writeToFile:plistFilePath atomically:YES];
}
于 2012-10-09T10:19:06.273 に答える