0

テーブルに問題がある!

解析テーブルビューを使用していますが、ビューを変更するとテーブルのデータが失われます。そこで、すべてのデータを nsuserdefault に保存することにしました。しかし、ここで問題となる NSUserDefault は、 「プロパティ リスト内の辞書と配列には、プロパティ値のみを含める必要があることに注意してください」と警告します。

注意: itemsToDisplay は NSMutableArray であり、タイトル、URL、データ、および parsedItems の概要が含まれています。

さて、ここに私のコード:

self.itemsToDisplay = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"items"] mutableCopy];

if (!self.itemsToDisplay) {
    self.itemsToDisplay = [[NSMutableArray alloc] init];
}

self.itemsToDisplay = [[NSMutableArray alloc]init];

self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors:
                       [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"date"
                                                                             ascending:NO] autorelease]]];


[[NSUserDefaults standardUserDefaults] setObject:self.itemsToDisplay forKey:@"items"];
[[NSUserDefaults standardUserDefaults] synchronize];

問題はsetObject:self.itemsToDisplayだと思いますが、解決方法がわかりません。

君たちありがとう..

4

2 に答える 2

1

最初に、テーブルはユーザー データを保持していないため、データを失うことはありません。データは、バインディングまたは委任を通じて提供されます。Apple のドキュメントのNSTableViewDataSourceを参照してください)。

次に、self.itemsToDisplay への最初の 3 つの割り当ては、最後の割り当てによってすべてオーバーライドされるため、(セッターに副作用がない限り) 役に立ちません。

最後に、このコードがすでにデリゲートにある場合は、NIB ファイルでデリゲートをインスタンス化して、データがビュー スワップ後も存続するようにする必要があります。デリゲートがビューでインスタンス化されたオブジェクトである場合、それはすべてのデータとともに消滅し、ユーザーデフォルトへの書き込みは、達成しようとしているものにとって悪い考えです。両方のビューよりも有効期間が長いオブジェクトにデリゲートを設定するだけです。

于 2013-04-25T19:03:18.460 に答える
0
self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors:
                       [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"date"
                                                                             ascending:NO] autorelease]]];

//First lets encode it
NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:self.itemsToDisplay];
[userDefault setObject:myEncodedObject forKey:[NSString stringWithFormat:@"sample"]];
于 2013-04-26T06:48:50.960 に答える