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];

次に、tableViewにarrayFilteredからのデータを入力します。次に、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

私はなんとか問題を解決することができました。基本的に、メイン配列から「Filtered」配列と「Other」配列の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 に答える