0

iphoneアプリにキーと値のペアをplistファイルに追加するViewControllerがあります。次に、plist全体をテーブルビューのViewControllerに表示します。私が抱えている問題は、iPhoneシミュレーターの値のみが表示され、アプリを完全に再起動した場合にのみ新しいキーと値のペアが表示されることです。

注:plistファイルはアプリのリソースディレクトリに追加されることになっています更新:以下のコードは私の質問の解決策です。さらに、plistの新しいエントリを表示するために、基本的にviewDidLoadのセクションを実行する更新ボタンを実装しました。

キーと値のペアを追加するViewControllerのコードは次のとおりです。

- (IBAction)addAction:(UIBarButtonItem *)sender
{    
    NSString *myFile=[[NSBundle mainBundle] pathForResource:@"File" ofType:@"plist"];

    dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:myFile];

    NSArray *docDir=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *filePath=[docDir objectAtIndex:0];
    NSString *plistPath=[filePath stringByAppendingPathComponent:@"File.plist"];

    //Check plist's existance using FileManager
    NSError *err=nil;
    NSFileManager *fManager=[NSFileManager defaultManager];

    if(![fManager fileExistsAtPath:plistPath])
    {
        //file doesn't exist, copy file from bundle to documents directory

        NSString *bundlePath=[[NSBundle mainBundle] pathForResource:@"File" ofType:@"plist"];
        [fManager copyItemAtPath:bundlePath toPath:plistPath error:&err];
    }

    //Get the dictionary from the plist's path
    dictionary =[[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    //Manipulate the dictionary
    [dictionary setObject:textContent forKey:textName];
    //Again save in doc directory.
    [dictionary writeToFile:plistPath atomically:YES];    
}

これは、他のViewControllerのテーブルビューにplistを表示するためのコードです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Initialize table data

    NSArray *docDir=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *filePath=[docDir objectAtIndex:0];
    NSString *plistPath=[filePath stringByAppendingPathComponent:@"File.plist"];


    dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:**plistPath**];
    verses = [dictionary allKeys];

    [self.mainTableView reloadData];

}

ご協力ありがとうございます!

4

1 に答える 1

1

デバイスでは、メインバンドルは読み取り専用であり、ドキュメントディレクトリパスに書き込みます。あなたはそれを介して取得することができます

NSArrayパス=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory、NSUserDomainMask、YES);

変更が起動時にのみ表示される理由は、ファイル名が一致しないためです

于 2012-08-30T22:28:19.480 に答える