изменение plist не работает - PullRequest
1 голос
/ 16 июня 2011

Мне нужно изменить значение BOOL в моем файле plist, хранящемся в bundle.Я могу получить доступ к словарю, который мне нужно изменить. Из nslogging я вижу, что dict обновляется с новым значением, но проблема в том, что когда я проверяю список в пакете, он не изменяется. любой ключ к пониманию того, почему он не обновляет список

  NSString* plistPath = nil;
        NSFileManager* manager = [NSFileManager defaultManager];
        if (plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"TopicsList.plist"]) 
        {
            if ([manager isWritableFileAtPath:plistPath]) 
            {
                NSMutableArray* dictarrays = [NSMutableArray arrayWithContentsOfFile:plistPath];
                NSMutableDictionary *dict=[dictarrays objectAtIndex:indexPath.row];
                NSLog(@"%@ ",dict );

                [dict setObject:[NSNumber numberWithBool:YES] forKey:@"isPaid"];

                NSLog(@"%@ ",dict );
                [dict writeToFile:plistPath atomically:NO];
                    NSLog(@"%@ ",dict );
                [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:&error];
            }
        }

Ответы [ 3 ]

5 голосов
/ 16 июня 2011

Является ли plist частью ваших ресурсов?Не уверен, что мы можем отредактировать список там.Скопируйте plist в папку Documents вашего приложения и обновите его там.

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *plistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"TopicsList.plist"];

success = [fileManager fileExistsAtPath:plistPath];
if(!success){
    //file does not exist. So look into mainBundle
    NSString *defaultPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"TopicsList.plist"];
    success = [fileManager copyItemAtPath:defaultPath toPath:plistPath error:&error];
}

Теперь, если вам нужно внести какие-либо изменения в plist или прочитать данные из plist, прочтите их из копии в папке Documents.

0 голосов
/ 16 июня 2011

Есть ли ошибка

Проверьте с помощью

NSError *error = nil
[dict writeToFile:plistPath atomically:YES encoding:NSASCIIStringEncoding error:&error];

if (error) {
  NSLog(@"Error: %@", [error description]);
} else {
NSLog(@"Success");
}
0 голосов
/ 16 июня 2011

Вы должны хранить свой список в каталоге документов.После этого вы также должны сохранить список при выходе из приложения.В противном случае, plist находится в основном пакете и не может быть изменен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...