У меня есть вопрос о чтении/записи plist. Я использую этот Cose для чтения PLISTЧтение/запись plist
NSString *strFilePath = [ [NSBundle mainBundle] pathForResource:@"miodb" ofType:@"plist" ] ;
NSMutableDictionary *dictMioDB = [[NSMutableDictionary alloc] initWithContentsOfFile:strFilePath] ;
NSString *strValue ;
strValue = [dictMioDB objectForKey: @"stringa1" ] ;
NSLog(@"%@" , strValue) ;
А для записи списка свойств я использую этот код:
NSString *strFilePath = [ [NSBundle mainBundle] pathForResource:@"miodb" ofType:@"plist" ] ;
NSLog(@"%@" , strFilePath) ;
NSMutableDictionary *dictMioDB = [[NSMutableDictionary alloc] initWithContentsOfFile:strFilePath] ;
NSString *strTextField = [NSString stringWithFormat: @"%@" , [txtField text] ] ;
// ga - salvataggio del valore nella chiave nel NSMutableDictionary
[dictMioDB setValue: strTextField forKey:@"stringa1"];
[dictMioDB writeToFile: strFilePath atomically:YES];
Теперь проблема, что PLIST должен быть сохранен в директории Documents Таким образом, я использовал этот код :
//percorso file su cartella documents
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *path = [documentsDir stringByAppendingPathComponent:@"iOre.sqlite"];
//[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
//controllo se il file esiste
if(![[NSFileManager defaultManager] fileExistsAtPath:path])
{
//se non esiste lo copio nella cartella cosuments
NSString *pathLocale=[[NSBundle mainBundle] pathForResource:@"iOre" ofType:@"sqlite"];
if ([[NSFileManager defaultManager] copyItemAtPath:pathLocale toPath:path error:nil] == YES)
{
NSLog(@"copia eseguita");
}
}
Теперь у меня есть соединить две части кодов в этом:
//percorso file su cartella documents
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *path = [documentsDir stringByAppendingPathComponent:@"LevelsD.plist"];
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
NSString *pathLocale;
//controllo se il file esiste
if(![[NSFileManager defaultManager] fileExistsAtPath:path])
{
//se non esiste lo copio nella cartella documents
pathLocale=[[NSBundle mainBundle] pathForResource:@"LevelsD" ofType:@"plist"];
if ([[NSFileManager defaultManager] copyItemAtPath:pathLocale toPath:path error:nil] == YES)
{
NSLog(@"copia eseguita");
}
}
// ga - trovo la posizione del .plist
//NSString *strFilePath = [ [NSBundle mainBundle] pathForResource:@"LevelsD" ofType:@"plist" ] ;
NSLog(@"%@" ,documentsDir) ;
// ga - copio tutto il .plist (la root è un Dictionary) in un NSMutableDictionary
NSMutableDictionary *dictMioDB = [[NSMutableDictionary alloc] initWithContentsOfFile:documentsDir] ;
NSString * txtField = @"1";
//NSString *strTextField = [NSString stringWithFormat: @"%@" , txtField ] ;
// ga - salvataggio del valore nella chiave nel NSMutableDictionary
[dictMioDB setValue: txtField forKey:@"LevelHere1"];
[dictMioDB writeToFile: pathLocale atomically:YES];
Это не работает, но теперь у меня есть некоторые сомнения. В моем файле plist я не вижу никаких изменений, но возможно, что значение «txtField» было сохранено в «dictMioDB»? Как я могу увидеть, была ли запись/строка вставлена в мой plis? Другое сомнение: когда я пишу что-то в папку Document с симулятором, данные будут удалены, когда я закрою это или когда я буду повторно компилировать приложение? В то время как в Iphone эти данные будут удалены при удалении приложения? Правильно? Последний дублет: когда я прочитаю plist, который находится в папке с документами, я могу использовать первый код, который автоматически ищет путь к plist?