2

plist にデータ ストアを使用してアプリを作成します。データを更新するにはどのような方法がありますか? plistに保存する代わりに、Webページを作成してそこからデータを取得した場合はどうでしょうか? または、iTunes に接続したときにデータを更新する方法はありますか? または他の提案はありますか?私が達成したいのは、ユーザーがアプリをダウンロードした後にデータを更新する方法です。

4

2 に答える 2

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.大きなファイル。コンテンツが更新される頻度に常に依存します。

完全なドキュメントを参照してください: NSDictionaryNSStringNSFileManagerNSDate

于 2010-08-28T07:31:40.593 に答える
1

plist は、メモリに読み込んで変更を加え、ファイルに書き戻す必要があるため、簡単には変更できません。

plist を記述するには、NSDictionary または NSArray のwriteToFile:atomically:メソッドを参照してください。plist は基本的に NSArrays、NSDictionaries、NSStrings、および NSData から構成される XML であることを忘れないでください。常にルート ノードを書き出す必要があります。

または、データを保存する他の方法を探してください: ユーザーのデフォルトまたは sqlite データベース。データを「クラウドに」保存することは、異なるデバイス間で共有したい場合やリモートで更新したい場合など、場合によってのみ意味があります。できれば避けた方が無難です。

于 2010-08-27T06:58:22.043 に答える