removeObjectForKey не удаляет значение из.файл plist
Я разрабатываю приложение для iPhone, в котором у меня есть TableView,
Что я хочу сделать, так это по щелчку UITableViewCell я хочу удалить эти значения из plist, MOBILES.Brand.2
и MOBILES.Brand.5
, если они существуют.плист, если их там нет .плист, то я хочу добавить его к моему .plist
Вот структура моего .плист:
: Вот мой фрагмент кода:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
plistPath = [self getPlistPath];
//PlistDict is mutableDictionary contains the keys and values of .plist (of above image)
if ([PlistDict valueForKeyPath:@"MOBILES.Brand.2"] != nil) { //if key and it's value exists in Filter.plist
//Delete Key from .plist...
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
[savedStock removeObjectForKey:@"MOBILES.Brand.2"];
[savedStock removeObjectForKey:@"MOBILES.Brand.5"];
[savedStock writeToFile:plistPath atomically:YES];
}else{
//Add Key to .plist
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
[data setValue:@"251" forKeyPath:@"MOBILES.Brand.2"];
[data setValue:@"298" forKeyPath:@"MOBILES.Brand.5"];
[data writeToFile:plistPath atomically:YES];
}
}
-(NSString*)getPlistPath{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Filter.plist"];
PlistDict = [NSMutableDictionary dictionaryWithContentsOfFile:path];
return path;
}
После написания вышеуказанного фрагмента кода он не удаляет ключи из .plist но он добавляет ключ успешно, если нет существовавший.
Где я делаю ошибку ? пожалуйста, помогите и заранее спасибо.
1 ответ:
Проблема в том, что вы пытаетесь удалить, используя
NSMutableDictionary keypath
непосредственно используяremoveObjectForKey
, что требуетexact key
Неkeypath
, и вы предоставляетеkeypath
. Используйте следующиеNSMutableDictionary Category
взятые из здесь@interface NSMutableDictionary (Additions) - (void)removeObjectForKeyPath: (NSString *)keyPath; @end @implementation NSMutableDictionary (Additions) - (void)removeObjectForKeyPath: (NSString *)keyPath { // Separate the key path NSArray * keyPathElements = [keyPath componentsSeparatedByString:@"."]; // Drop the last element and rejoin the path NSUInteger numElements = [keyPathElements count]; NSString * keyPathHead = [[keyPathElements subarrayWithRange:(NSRange){0, numElements - 1}] componentsJoinedByString:@"."]; // Get the mutable dictionary represented by the path minus that last element NSMutableDictionary * tailContainer = [self valueForKeyPath:keyPathHead]; // Remove the object represented by the last element [tailContainer removeObjectForKey:[keyPathElements lastObject]]; } @end
Это должно работать на вас.
Способ - 2
Если вышеизложенное не работает, вы можете выполнить итерацию вашего словаря и, в частности, удалить объект для ключа.. Попробуйте
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath]; NSMutableDictionary *brand=[[savedStock objectForKey:@"MOBILES"] objectForKey:@"Brand"]; [brand removeObjectForKey:@"2"]; [brand removeObjectForKey:@"5"];
Ура.