обновление дочернего списка программно отображается в симуляторе, но не в устройстве

Я впервые реализую пакет настроек, и я сделал это, создав Root.plist и Child.plist в Settings.bundle и имея несколько полей в этом plist. Мне нужно обновить поля (добавить или удалить) Child.plist в соответствии с веб-службами, и я написал для этого код в appdelegate. Он отлично работает в симуляторе (все поля обновляются соответственно), но не работает в устройстве. Может ли кто-нибудь предложить мне, что может быть причиной этого.

код, чтобы скопировать plist в каталог документов и обновить его (согласно ответу)

NSString *bundle = [[NSBundle mainBundle]pathForResource:@"Settings" ofType:@"bundle"];
NSString *path = [bundle stringByAppendingPathComponent:@"Category.plist"];

NSMutableDictionary *dictOfPlist = [NSDictionary dictionaryWithContentsOfFile:path];
NSMutableArray *dictArray = [dictOfPlist valueForKey:@"PreferenceSpecifiers"];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path1 = [documentsDirectory stringByAppendingPathComponent:@"Child.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath: path1])
{
    [fileManager copyItemAtPath:path toPath: path1 error:&error];
}
for (some condition) 
{
    // creating dictionary
    // add dictionary to array dictArray
}
[dictOfPlist setObject:dictArray forKey:@"PreferenceSpecifiers"];
[dictOfPlist writeToFile:path1 atomically:YES];

person Kapil    schedule 16.10.2013    source источник


Ответы (1)


Я думаю, у вас есть проблема, чтобы написать свой PLIST. Вам необходимо скопировать PLIST из пакета ресурсов в каталог документов и изменить PLIST внутри этой папки.

Для этого вы можете использовать этот фрагмент кода:

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

NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path])
{
    NSString *bundle = [[NSBundle mainBundle] pathForResource:@”data” ofType:@”plist”];
     [fileManager copyItemAtPath:bundle toPath: path error:&error];
}

Посмотрите здесь.

person Jordan Montel    schedule 16.10.2013
comment
да, я пробовал, но это не работает, потому что я использую plist для настроек, и если мы создадим дочерний plist в каталоге документов, он будет недоступен из Root.plist. Пожалуйста, предложите мне, как я могу обновить дочерний plist из кода. - person Kapil; 17.10.2013
comment
Я обновил вопрос с помощью кода, который я использую для копирования Category.plist (settings.bundle) в Child.plist (каталог документов) и дал ссылку на Child.plist в Root.plist, но теперь в дочерней панели ничего не отображается. Я просмотрел еще несколько документов и ссылок и обнаружил, что мы не можем программно обновить пакет настроек. Пожалуйста, предложите мне любой другой подход, который я могу использовать здесь. Кажется, что Root.plist не может получить доступ к Child.plist. - person Kapil; 17.10.2013