2011-08-07 14 views
6

私のアプリはWebサービスからJSONデータを取得しています。現時点までのすべての場合、情報はメモリに保持されるか、APIで使用されるログイントークン以外のものをローカルに保持する必要はなく、オンザフライでリフレッシュされます。私たちが追加している新機能の1つを使って、long、lat、radius、およびnameを持つ最大26の場所のグループを取ります。iOSでオブジェクトを保存して後で使用できるようにする

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

このデータは、検索、変更、編集、および再保存する必要があります。これらのすべては、それらの26のオブジェクトのいずれかを引き出す能力を依然として保持している。読んで助けてくれてありがとう。

答えて

5

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

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

NSUserDefaultsは、ユーザーの設定を保存するように設計された機能を備えたplistです。いくつかの行のコードを保存するために定期的なplistの代わりに使われることがよくあります。これはあなたの仕事と無関係に複雑さが増すので、悪い考えです。

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

もっと多くの機能を探す場合は、Best way to store data on iphoneを参照してください。ただし、今のようには見えません。

いくつかのコードをあなたが始めるためには...辞職アプリに対してsaveを呼び出すために登録:あなたはNSCodingを実装アーカイブしたいものは何でもグラフ/辞書/の各オブジェクトには

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

- (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; 
} 
+0

私は実装に計画していたログイン情報を保存するためのキーチェーンを使用してのいくつかの例を見てきました。情報をありがとう。 –

+0

CoreDataの代わりに20-ish項目の方がはるかに良いアイデアがあることを確認してください。ユーザー名とパスワードを保存する必要がある場合は、ここで使用方法を説明したAppleのサンプルソースがあります。http://stackoverflow.com/questions/6972092/ios-how-to-store-username-password-wihtin-an -app/6972305#6972305 –

3

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

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

は、リモートで大規模なもののために、私はこれを使用します。

1

私はこの同じ質問をして、もっと良い解決策を見つけました。

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

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

Deserializing local NSString of JSON into objects via RestKit (no network download)

+0

非常にいいです、私は私のプロジェクトでこのアプローチを使用します、ありがとう! :-) – kernix

関連する問題