Проблемы с добавлением данных в файл plist - PullRequest
2 голосов
/ 01 ноября 2011

Я пытался записать данные обратно в предопределенный файл plist (data.plist) в моем комплекте.Используя приведенный ниже код, я вызываю подпрограмму dictionaryFromPlist, чтобы открыть файл, а затем вызываю writeDictionaryToPlist для записи в файл plist.Тем не менее, данные не добавляются в файл plist.

NSDictionary *dict = [self dictionaryFromPlist];

NSString *key = @"Reports";
NSString *value = @"TestingTesting";
[dict setValue:value forKey:key];

[self writeDictionaryToPlist:dict];


- (NSMutableDictionary*)dictionaryFromPlist {
  NSString *filePath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
  NSMutableDictionary* propertyListValues = [[NSMutableDictionary alloc]      
  initWithContentsOfFile:filePath];
  return [propertyListValues autorelease];
}

- (BOOL)writeDictionaryToPlist:(NSDictionary*)plistDict{
  NSString *filePath = @"data.plist";
  BOOL result = [plistDict writeToFile:filePath atomically:YES];
  return result;
}

Код успешно проходит, и ошибка не выдается, но данные не добавляются в мой файл plist.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Вы не можете написать в свой пакет, это только для чтения.Если в вашем случае вы пишете по относительному пути, а не в комплекте.

Я не уверен, какой рабочий каталог по умолчанию для приложений iOS.Лучше всего использовать абсолютные пути.Вы должны писать в каталог документов / кеша.Примерно так вы получите путь:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

Затем просто возьмите lastObject и добавьте его к имени вашего файла.

1 голос
/ 01 ноября 2011

Как уже упоминалось @logancautrell, вы не можете писать в mainbundle, вы можете сохранить свой plist в папке документов приложения, вы можете сделать это:

 NSString *path = @"example.plist";
 NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *basePath = ([paths count]> 0)? [paths objectAtIndex: 0]: nil;
 NSString *documentPath = [basePath stringByAppendingPathComponent:path] // Documents
 NSFileManager *fileManager  = [NSFileManager defaultManager];
 BOOL checkfile = [fileManager fileExistsAtPath: documentPath];
 NSLog(@"%@", (checkFile ? @"Exist": @"Not exist"));//check if exist
 if(!checkfile) {//if not exist
    BOOL copyFileToDoc = [yourDictionary writeToFile:documentPath atomically: YES];
    NSLog(@"%@",(copyFileToDoc ? @"Copied": @"Not copied"));
  }
...