Протестируйте массив NSmutable из plist перед сохранением - PullRequest
0 голосов
/ 10 сентября 2009

Я пытаюсь сделать приложение какао, которое читает и пишет в файл .plist. Я могу получить информацию из .plist, записать в нее, но когда ключ (только со строками) пуст, приложение не записывает в plist.

вот образец:

-

 (IBAction)saveBoot:(id)sender {
    NSString *errorDesc;
    NSString *bootPath = @"/myplist.plist";
    NSMutableDictionary *plistBootDict = 
        [NSMutableDictionary dictionaryWithObjects:
        [NSMutableArray arrayWithObjects:

                        Rescan,
                    RescanPrompt,
                    GUI,
                    InstantMenu,
                        DefaultPartition,
                    EHCIacquire,
                    nil]

                        forKeys:[NSMutableArray arrayWithObjects: 

                    @"Rescan",
                    @"Rescan Prompt",
                    @"GUI",
                    @"Instant Menu",
                    @"Default Partition",
                    @"EHCIacquire",
                    nil]];

      NSData *plistBootData = [NSPropertyListSerialization 
                        dataFromPropertyList:plistBootDict
                  format:NSPropertyListXMLFormat_v1_0
                  errorDescription:&errorDesc];




        if (bootPath) {
        [plistBootData writeToFile:bootPath atomically:NO];
    }
        else {
            NSLog(errorDesc);
            [errorDesc release];
        }


    }
    @end

Я думаю, что мне нужен цикл, чтобы проверить, является ли каждый ключ пустым или нет (и удалить его, если он пуст), но я пробовал другой (objectEnumerator, objectForKey: .. и т. д.) метод без успеха.

Если кто-то может помочь начинающему, как я, заранее спасибо.

Ронан.

1 Ответ

0 голосов
/ 10 сентября 2009

Проблема, вероятно, заключается в том, что, поскольку nil является терминатором для списков переменных аргументов, поэтому, если, скажем, RescanPrompt равен nil, массив объектов будет содержать только до этой части (так что вы не можете " удалить, если пуст ", так как он не будет существовать в словаре в первую очередь). Вы, вероятно, должны построить свой словарь по частям; что-то вроде:

NSMutableDictionary *plistBootDict = [NSMutableDictionary dictionary];

if (Rescan)
    [plistBootDisc setObject:Rescan forKey:@"Rescan"];
if (GUI)
    [plistBootDisc setObject:GUI forKey:@"GUI"];

// etc

(Кроме того, нет причин использовать NSMutableArray или NSMutableDictionary, если вы никогда не собираетесь их мутировать позже.)

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