0

我将 plist 加载到 NSArry,过滤该数组以捕获我需要的数据,然后将数据呈现给 UITableView。这很好用。

编辑:

我正在使用字典数组。Plist 充满了字典数组。

这就是我所做的:

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/data.plist"];
//array is filled with dictionaries
array = [NSMutableArray arrayWithContentsOfFile:filePath];

//filter the array to catch appropriate data (there are maybe 10 objects):
self.arrayFiltered = [NSMutableArray arrayWithCapacity:[array count]];
NSDictionary *dict;
for (dict in array)
    if ([[dict valueForKey:@"globalKey"] isEqualToNumber:[NSNumber numberWithInt:year]])
        [arrayFiltrirani addObject:dict];

现在我用来自 arrayFiltered 的数据填充 tableView。现在我想从 tableView 和 arrayFiltered 中删除一行。

[self.arrayFiltrirani removeObjectAtIndex:indexPath.row];

但!!!如何更新原始数组并将其保存到 plist?

4

3 回答 3

1

由于您使用的是字典,因此您需要将实际的字典容器对象写回 data.plist 文件,所以

NSDictionary *myDictionary = [masterArray objectAtIndex:indexOfDictionary];
NSMutableArray *myDataArray = [myDictionary objectForKey:@"dataArray"];
[myDataArray removeObject:objRemovedFromTable]; //or removeObjectAtIndex:indexPath.row
NSString *filePath = [docsDirectory stringByAppendingPathComponent:@"data.plist"];
[masterArray writeToFile:filePath atomically:YES];
于 2012-06-14T21:05:37.820 回答
1

我设法解决了我的问题。基本上我从主数组、“过滤”数组和“其他”数组中制作了 2 个数组。

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

array = [NSMutableArray arrayWithContentsOfFile:filePath];

self.arrayFiltered = [NSMutableArray arrayWithCapacity:[array count]];
self.arrayOther = [NSMutableArray arrayWithCapacity:[array count]];

NSDictionary *dict;
for (dict in array)
    if ([[dict valueForKey:@"globalKey"] isEqualToNumber:[NSNumber numberWithInt:godinaMjesec]])
        [arrayFiltered addObject:dict];
    else {
        [arrayOther addObject:dict];
    }

现在,当我想从 arrayFiltered (tableView 从中获取数据)中删除数据时:

[self.arrayFiltered removeObjectAtIndex:indexPath.row];

要覆盖原始数组:

[self.arrayOther addObjectsFromArray:self.arrayFiltered];
[self.arrayOther writeToFile:filePath atomically:YES];

这可能不是正确的方法,但它对我有用。

于 2012-06-15T09:06:40.730 回答
0

如果它是一个需要一段时间才能写入的大型 plist 文件,那么您可能使用了错误的工具。我会使用 Core Data 来删除单独的数据行。

于 2012-06-14T21:13:55.123 回答