0

uiviews の配列を NSDefault に追加しようとしていますが、配列を保持していないようです。誰でも理由を知っていますか?また、各ビューを nsdefault に保存する前に nsvalue に保存しようとしましたが、まだ機能しませんでした。

NSArray *arr = [[NSArray alloc] initWithObjects:[NSValue valueWithNonretainedObject:myView], nil]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:arr forKey:@"myKey"];

NSArray *resultArray = [defaults objectForKey:@"myKey"];

そしてresultArrayはnilです!

ありがとう

私がこれをやろうとしている理由は、これらが私の uitableview のヘッダー ビューだからです。それらを作成するには時間がかかるため、一度だけ作成して、後でアクセスできるように保存したいと考えました。

4

3 に答える 3

3

NSUserDefaults のドキュメントから:

NSUserDefaults クラスは、float、double、integer、Boolean、URL などの一般的な型にアクセスするための便利なメソッドを提供します。デフォルト オブジェクトは、プロパティ リスト、つまり、NSData、NSString、NSNumber、NSDate、NSArray、または NSDictionary のインスタンス (またはコレクションの場合はインスタンスの組み合わせ) である必要があります。他のタイプのオブジェクトを保存する場合は、通常、アーカイブして NSData のインスタンスを作成する必要があります。詳細については、プリファレンスおよび設定プログラミング ガイドを参照してください。

UIView を (なぜ?) NSUserDefaults に入れたい場合は、最初にそれを NSData オブジェクトにアーカイブする必要があります。

しかし、NSUserDefaults にビューを配置する理由を自問する必要があります。NSUserDefaults にはデータのビットのみを配置する必要があります。表示データを表示します。データが戻ったら、ビューを簡単に再表示できます。必要なデータを NSUserDefaults に入れることを検討してください。

于 2012-10-26T22:28:19.417 に答える
2

よろしいですか?モデルの配列をデータベースまたはファイルに保存し、必要に応じてそれらからビューを再作成する方が確実に優れています。

于 2012-10-26T22:29:05.763 に答える
1

あはは!この問題に直面したのはあなたが最初ではありません。私自身はこの種の問題に遭遇したことはありませんが、以下のリンクには、ビューをキャッシュして再利用できるコードを含むブログがあります。その後、起動時にビューを再作成するだけで済みます。コード例:

テーブルビューで再利用するために UIView をキャッシュする

于 2012-10-26T22:57:03.533 に答える