0

Fetchを使用してsqliteデータベースから行をクエリし、結果をNSMutableArraymyDataArrayにロードしています。私がやりたいのは、myDataArrayの値をアプリケーションの設定plistファイルに保存することです。しかし、以下のコードを実行すると、次のエラーが発生します。

[NSUserDefaults setObject:forKey:]:クラス'__NSArrayM'の非プロパティ値'(...(注:50行の値を含む))'を挿入しようとしました。

同じ方法を使用して他のNSMutableArrayをplistファイルに保存していますが、クエリされたデータベースの結果を保存する方法がわかりません。

あなたは尋ねるかもしれません:なぜ値を保存するのですか、値が再び必要になったときにデータベースを再クエリするだけですか?その理由は、データベースからランダムな行を取得しているため、最初にランダム化されたとおりに行を呼び出す必要があるためです。

助けていただければ幸いです、lq

 ...
 fetchResults = [managedObjectContext executeFetchRequest:request error:&error];
 self.myDataArray = [NSMutableArray arrayWithArray:fetchResults];

 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 [userDefaults setObject:self.myDataArray forKey:kFetchResultsArray];
4

1 に答える 1

0

myDataArrayのアイテムはプロパティリストオブジェクトではないため、plistに自動的にシリアル化することはできません。

NSUserDefaultsクラスsetObject:forKey:リファレンスから:

値パラメーターは、プロパティリストオブジェクト(NSData、NSString、NSNumber、NSDate、NSArray、またはNSDictionary)のみにすることができます。NSArrayおよびNSDictionaryオブジェクトの場合、それらの内容はプロパティリストオブジェクトである必要があります。「プロパティリストとは」を参照してください。プロパティリストプログラミングガイド。

このデータを保存するために、ユーザーのデフォルト以外のメカニズムを検討することをお勧めします。プロパティリストプログラミングガイドから:

多くのアプリケーションでは、後で必要になる情報を保存するためのメカニズムが必要です。少量の永続データ(たとえば、数百キロバイト未満)を保存する必要がある状況では、プロパティリストは、データを整理、保存、およびアクセスするための統一された便利な手段を提供します。

状況によっては、プロパティリストアーキテクチャが不十分であることが判明する場合があります。オブジェクト、プロパティリストアーキテクチャでサポートされていないオブジェクト、または可変性設定を保持する必要があるオブジェクトの大きくて複雑なグラフを保存する方法が必要な場合は、アーカイブを使用してください。詳細については、アーカイブおよびシリアル化プログラミングガイドを参照してください。

于 2010-10-04T19:31:53.970 に答える