何らかの理由で、新しいデータを plist ファイルに保存できません。これは、データを保存するために使用しているコードです。
-(void)saveData:(NSMutableDictionary *)dictionaryData toFile:(NSString *)filename {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *path = [docDir stringByAppendingPathComponent:filename];
NSMutableArray *data = [[NSMutableArray alloc] initWithContentsOfFile:path];
[data addObject:dictionaryData];
[data writeToFile:filename atomically:YES];
}
これは、ファイルが存在しない場合に備えて、バンドルからアプリ ディレクトリにファイルをコピーするために使用したコードです。
-(NSMutableArray *)loadFromFile:(NSString *)filename {
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *path = [docDir stringByAppendingPathComponent:filename];
NSFileManager *fileMgr = [NSFileManager defaultManager];
if(![fileMgr fileExistsAtPath:path]) {
NSArray *fileArray = [filename componentsSeparatedByString:@"."];
NSString *name = [fileArray objectAtIndex:0];
NSString *ext = [fileArray objectAtIndex:1];
NSString *bundle = [[NSBundle mainBundle] pathForResource:name ofType:ext];
[fileMgr copyItemAtPath:bundle toPath:path error:&error];
}
NSMutableArray *data = [[NSMutableArray alloc] initWithContentsOfFile:path];
return data;
}
何らかの理由で、新しいデータを plist ファイルに保存できません。新しい NSMutableDictionary オブジェクトを plist ファイルに (saveData:toFile: メソッドを使用して) 追加しようとすると、plist ファイルのデータで配列変数をリロードします - 新しいオブジェクトがありません。私は何か間違ったことをしていますか?
これは私がplistファイルをロードする方法です:
@property (nonatomic, strong) NSMutableArray *modules;
@property (nonatomic, strong) NSMutableDictionary *module;
- (void)viewDidLoad {
[super viewDidLoad];
self.modules = [self loadFromFile:@"ModulesList.plist"];
self.module = [self.modules objectAtIndex:0];
for (int i = 0; i < self.modules.count; i++ ) {
NSLog(@"Modules array from plist file, module at index %i : %@",i, [self.modules objectAtIndex:i]);
}
テスト目的よりも、新しいモジュール オブジェクトを追加する次のコードがあります。
- (IBAction)leftButton:(id)sender {
NSString *mytitle = [[NSString alloc] initWithFormat:@"my title"];
NSString *myauthor = [[NSString alloc] initWithFormat:@"my author2"];
NSUInteger myean = 22023423;
NSString *mytitle2 = [[NSString alloc] initWithFormat:@"my title 2"];
NSString *myauthor2 = [[NSString alloc] initWithFormat:@"my author2"];
NSUInteger myean2 = 29032432;
NSString *mytitle3 = [[NSString alloc] initWithFormat:@"my title 3"];
NSString *myauthor3 = [[NSString alloc] initWithFormat:@"my author 3"];
NSUInteger myean3 = 21023423;
NSMutableDictionary *mybook = [[NSMutableDictionary alloc] init];
NSMutableDictionary *mybook2 = [[NSMutableDictionary alloc] init];
NSMutableDictionary *mybook3 = [[NSMutableDictionary alloc] init];
[mybook setObject:mytitle forKey:@"title"];
[mybook setObject:myauthor forKey:@"author"];
[mybook setObject:[NSNumber numberWithInteger:myean] forKey:@"ean"];
[mybook2 setObject:mytitle2 forKey:@"title"];
[mybook2 setObject:myauthor2 forKey:@"author"];
[mybook2 setObject:[NSNumber numberWithInteger:myean2] forKey:@"ean"];
[mybook3 setObject:mytitle3 forKey:@"title"];
[mybook3 setObject:myauthor3 forKey:@"author"];
[mybook3 setObject:[NSNumber numberWithInteger:myean3] forKey:@"ean"];
NSMutableArray *mybooks = [[NSMutableArray alloc] init];
[mybooks addObject:mybook];
[mybooks addObject:mybook2];
[mybooks addObject:mybook3];
[self.module setObject:mybooks forKey:@"books"];
[self.modules addObject:self.module];
for (int i = 0; i < self.modules.count; i++ ) {
NSLog(@"Modules array after add operation, module at index: %i: %@",i, [self.modules objectAtIndex:i]);
}
[self saveData:self.module toFile:@"ModulesList.plist"];
}
ボタンアクションで plist から self.modules 配列をリロードするときよりも、新しいデータはそこにありません:
- (IBAction)reload:(id)sender {
self.modules = [self loadFromFile:@"ModulesList.plist"];
for (int i = 0; i < self.modules.count; i++ ) {
NSLog(@"RELOAD: Modules array from plist file, module at index %i : %@",i,[self.modules objectAtIndex:i]);
}
}
これは私の plist ファイルのスクリーンショットです: http://dl.dropbox.com/u/49076351/Screen%20Shot%202013-02-27%20at%2016.27.45.png