0

ユーザーが別のdata.plistから参照された文字列を含むカスタム作成されたワークアウトルーチンをアプリバンドルに保存できる、ユーザーが編集可能なplistを作成しようとしています。

NSCodingがこれを実現するための最良の方法だと思います。これまでのところ、インターフェイスはナビゲーションバーとテーブルビューとして設定されています。

デフォルトでは空白にしたいので、ユーザーはナビゲーションバーの右上にある「+」を押す必要があります。次に、胸の日や上腕二頭筋の日など、配列のエントリの名前を入力できます。そして、その配列内には、その日の特定のエクササイズの辞書または別の文字列の配列があります。たとえば、ベンチプレスや上腕二頭筋のカールです。

このplistは編集可能である必要があるため、アプリバンドルではなく、ユーザーのドキュメントフォルダーに配置されます。

例:

トップアレイは、チェストデイ、バックデイ、レッグデイで構成されています。チェストデイ辞書には、ベンチプレス、チェストプル、腕立て伏せなどが含まれます。

アップデート:

このメソッドを追加して、ルーチンファイルを検索します。

    -(void)loadData
{
    if(YES)
    {
        NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSString* routineFile = [documentsPath stringByAppendingPathComponent:@"routine.plist"];
        BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:routineFile];
    }
    else
    {
        //load file
    }
}
4

2 に答える 2

2

NSCodingは、NSArchiver、NSKeyedArchiverなどで使用されるプロトコルであり、配列をプロパティリストにシリアル化するためのものではありません。

ユーザーがプロパティリストを編集しようとしているという考えを忘れてください。ユーザーがアプリのデータを編集しようとしています。データがプロパティリストとして保存されているという事実は、実装の詳細にすぎません。アプリが起動すると、データファイルに保存されているデータを読み取ります。ユーザーはそれを編集し、それを見ます。後のある時点で、おそらく各編集の後、おそらくアプリが終了する直前に、データをファイルに書き戻します。これはプロパティリストなので、ファイルの更新について心配する必要はありません。すでにすべてのデータがあるので、まったく新しいプロパティリストを作成し、そのファイルを使用して古いものを置き換えます。

おそらく私は間違っていて、ユーザーがテキストエディタを使用してプロパティリストを手動で編集することを本当に意図しています。これは間違いです。プロパティリストが人間が読める形式であることは素晴らしいことですが、ユーザーに生データファイルを手動で編集するように依頼することは、アプリが壊れていることを強く示しています。アプリの全体的な目的は、ユーザーのためにこの情報を追跡することです。テキストエディタを使用して管理したい場合は、アプリは必要ありません。そうは言っても、私は間違っていないことを願っています。;-)

于 2011-03-23T02:08:04.830 に答える
1

これにNSCodingを使用することはないと思います-作業しているのがNSArray、NSDictionary、NSStringなどの標準のplistオブジェクトだけである場合、一番上の配列の-writeToFile:atomically:メソッドは仕事をする簡単な方法です。

于 2011-03-23T01:50:21.280 に答える