Найдите словарь в NSMutableDictionary и удалите его - PullRequest
0 голосов
/ 05 марта 2011
    <plist version="1.0">
<dict>
    <key>Rows</key>
    <array>
        <dict>
            <key>FavTitle</key>
            <string>AppliedVersion</string>
            <key>SaveName</key>
            <string>122.pdf</string>
            <key>duh</key>
            <string>Favourited</string>
        </dict>
        <dict>
            <key>FavTitle</key>
            <string>Test Eng. Version</string>
            <key>SaveName</key>
            <string>dsds.pdf</string>
            <key>duh</key>
            <string>Favourited</string>
        </dict>
    </array>
</dict>
</plist>

Попытка и неудача удаления вещей с этим:

NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"Favourites.plist"];
    NSMutableDictionary *rootDict = [[NSMutableDictionary alloc] initWithContentsOfFile:writablePath];
    NSMutableDictionary *newFav = [NSMutableDictionary dictionaryWithObjectsAndKeys: selectedFavTitle, @"FavTitle", @"Favourited", @"duh", selectedSaveName, @"SaveName", nil];
    [[rootDict objectForKey:@"Rows"] removeObjectIdenticalTo:newFav];  
    [rootDict writeToFile:writablePath atomically: YES];

Это делает мою голову в! Недостаток:

[[rootDict objectForKey:@"Rows"] removeObjectIdenticalTo:newFav]; 

, поскольку это не удаляет сопоставленный объект

Ответы [ 2 ]

1 голос
/ 05 марта 2011
NSMutableDictionary *newFav = [NSMutableDictionary dictionaryWithObjectsAndKeys: selectedFavTitle, @"FavTitle", @"Favourited", @"duh", selectedSaveName, @"SaveName", nil];

Эта строка создает новый экземпляр NSMutableDictionary. Поэтому, когда вы вызываете removeObjectIdenticalTo:, он ничего не соответствует, потому что этот новый экземпляр не совпадает с объектом в rootDict.

Вы можете либо отфильтровать ненужные объекты с помощью filterUsingPredicate:, либо вы можете перебрать rootDict вручную, чтобы найти и удалить объект вручную.

0 голосов
/ 06 марта 2011

Я думаю, будут проблемы с кодировкой.Вы не сказали нам, какую кодировку вы указали при сохранении этого plist-файла, и не указали явно, как это:

<?xml version="1.0" encoding="UTF-8"?>
...