2009-09-10 2 views
0

Я пытаюсь сделать приложение для какао, которое читает-записывает в .plist-файл. Я могу получить информацию из .plist, записать, но когда ключ (только со строками) пуст, приложение не записывается в plist.Тест NSmutable массив из 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: ..etc) способ белый успех.

Если кто-то может помочь новичкам вроде меня, заранее.

Ronan.

+0

Не могли бы вы форматировать, что код немного, так что это Безразлично Прокрутка по горизонтали? –

ответ

0

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

NSMutableDictionary *plistBootDict = [NSMutableDictionary dictionary]; 

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

// etc 

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

+0

Хорошо, попробуем таким образом. Спасибо за советы. – ronan

+0

Просто попробовал, и он работает так, как ожидалось. Большое спасибо за вашу помощь. С уважением, – ronan

Смежные вопросы