6

私のアプリは、WebサービスからJSONデータを取得しています。これまでのすべてのインスタンスで、情報はメモリに保持されるか、APIで使用されるログイントークン以外のものをローカルに保持する必要なしに、その場で更新されます。追加する新機能の1つとして、最大26の場所のグループを、long、lat、radius、およびnameで取得します。

また、より大きなオブジェクトを作成するには、このデータに1〜2個のフィールドを追加する必要があります。だから私の質問は、iOSファイルシステムにこのタイプのデータを保存するための最良の方法は何でしょうか?現在、NSUserDefaultsを使用していますが、大量のデータについては、制限があるか、お勧めできません。そうでないかもしれない。

このデータは、取得、変更、編集、および再保存する必要があります。これらの26個のオブジェクトのいずれかをプルする機能を保持しながら、これらすべてを実行します。読んで助けてくれてありがとう。

4

3 に答える 3

5

このような少量のデータ (26 項目) については、アーカイブをお勧めします。

NSKeyedArchiver/を使用して plist に保存しますNSKeyedUnarchiver。デリゲートの didFinishLaunchingWithOptions からデータを読み取り、リッスンしUIApplicationWillResignActiveNotificationて保存します。

ANSUserDefaultsは、ユーザー設定を保存するように設計された機能を備えた plist です。数行のコードを節約するために、通常の plist の代わりに使用されることがよくありますが、タスクとは関係のない複雑さが増すため、これは悪い考えだと思います。

誰かがデバイスを盗んでフォレンジックを実行することからログインを保護したい場合は、キーチェーンを使用します。ラッパーを使用していくつかの記事を読みたいと思うかもしれません。興味があればコメントしてください。

より多くの機能を探している場合は、iPhone にデータを保存するための最良の方法を参照してくださいが、現在はそうではないようです。

始めるためのいくつかのコード... 登録して、アプリの再署名時に保存を呼び出します。

[[NSNotificationCenter defaultCenter]
        addObserver:self 
           selector:@selector(saveMyData) 
               name:UIApplicationWillResignActiveNotification 
             object:nil];

グラフ/辞書/アーカイブしたいものの各オブジェクトで、NSCoding を実装します。

- (void)encodeWithCoder:(NSCoder*)coder {
    [coder encodeObject:myIvar forKey:kmyIvar];
}

- (id)initWithCoder:(NSCoder*)coder {
    if((self = [super initWithCoder:coder])) {
        self.myIvar = [[coder decodeObjectForKey:kmyIvar] retain];
    }
    return self;
}
于 2011-08-07T12:32:09.653 に答える
3

コアデータに関するこのガイドを確認してください。これは、デバイスにローカルにデータを保存するための最良の方法です。これはネイティブのcocoaAPIであり、バインディングと互換性があります。さらに、データをXML、SQLite、およびBinaryとして保存するかどうかを選択できます。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html

リモートで大きいものには、これを使用します。

于 2011-08-07T12:05:25.250 に答える
1

私はこれと同じ質問をし、はるかに優れた解決策を見つけました。

できることは、JSON文字列をNSUserDefaultとして保存することです。次に、アプリをリロードするときに、最初にJSON文字列をオブジェクトにマップするために使用したのと同じメソッド(またはフレームワークユーティリティ)を使用します。このようにして、NSUserDefaultsの使いやすさを引き続き利用できます。

RestKitを使用してWebサービスを管理している場合は、さらに簡単になります。この投稿の回答は、RestKitのJSONパーサーを使用してJSONからオブジェクトにマップする方法を示しています。

RestKitを介してJSONのローカルNSStringをオブジェクトに逆シリアル化する(ネットワークダウンロードなし)

于 2012-08-18T00:23:03.307 に答える