plist にデータ ストアを使用してアプリを作成します。データを更新するにはどのような方法がありますか? plistに保存する代わりに、Webページを作成してそこからデータを取得した場合はどうでしょうか? または、iTunes に接続したときにデータを更新する方法はありますか? または他の提案はありますか?私が達成したいのは、ユーザーがアプリをダウンロードした後にデータを更新する方法です。
2 に答える
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dir = [path objectAtIndex:0];
NSString *filePath = [dir stringByAppendingPathComponent:@"my.plist"];
NSMutableDictionary *localDictionary;
NSUrl *remoteUrl = [NSURL URLWithString:@"http://server.com/my.plist"];
NSMutableDictionary *remoteDictionary = [NSMutableDictionary dictionaryWithContentsOfURL:remoteUrl];
if(remoteDictionary != nil) {
[remoteDictionary writeToFile:filePath atomically:YES];
localDictionary = remoteDictionary;
}
else {
localDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
if(localDictionary == nil) localDictionary = [NSMutableDictionary dictionary];
}
my.plist
これはからのコピーを取得しようとしますhttp://server.com/
。成功すると、それをディスクに書き込み、それを指し示しlocalDictionary
ます。エラーが発生した場合、ディスクからの読み取りを試みます (たとえば、接続があったときに以前にダウンロードされた)。ディスクは空のNSMutableDictionary
. どちらの方法でも、最後localDictionary
に a を指します。NSMutableDictionary
これは非常に単純で、コードが実行されるたびにファイルを要求します。たとえば、NSFileModificationDate
(obtained by NSFileManger attributesOfItemAtPath:error:
) とNSDate
を使用して、更新が必要かどうかを判断できます。または、大きなファイルのバージョン管理も同様に理にかなっています。大きなファイルのバージョンを含む小さなファイルを用意することで、サーバーから小さなファイルを取得し(たとえば、NSString
.大きなファイル。コンテンツが更新される頻度に常に依存します。
完全なドキュメントを参照してください: NSDictionary、NSString、NSFileManager、NSDate
plist は、メモリに読み込んで変更を加え、ファイルに書き戻す必要があるため、簡単には変更できません。
plist を記述するには、NSDictionary または NSArray のwriteToFile:atomically:
メソッドを参照してください。plist は基本的に NSArrays、NSDictionaries、NSStrings、および NSData から構成される XML であることを忘れないでください。常にルート ノードを書き出す必要があります。
または、データを保存する他の方法を探してください: ユーザーのデフォルトまたは sqlite データベース。データを「クラウドに」保存することは、異なるデバイス間で共有したい場合やリモートで更新したい場合など、場合によってのみ意味があります。できれば避けた方が無難です。