2011-07-06 15 views
2

plistファイルにブール値を書き込もうとしていますが、実際にどこが間違っているのか分かりません。私はまだ例外/エラーを取得していませんが、値は関係するファイルに変更されません。さらに、ファイルパスも正しく、myDictの割り当ては、値がファイルから読み取られたことを示します。続きplistファイルにブール値を書き込めません

は、私はあなたのリソースにあるファイルを変更/書き込みができない

-(void)SetSettings:(BOOL)SoundOn: (BOOL)GlowOn 
{ 
    NSString *pathSettingFile = [[NSString alloc]initWithString:[[NSBundle mainBundle]pathForResource:@"AppSettings" ofType:@"plist"]]; 

    NSMutableDictionary *myDict = [NSMutableDictionary dictionaryWithContentsOfFile:pathSettingFile]; 

    [myDict setObject:[NSNumber numberWithBool:SoundOn] forKey:@"isSoundOn"]; 
    [myDict setObject:[NSNumber numberWithBool:GlowOn] forKey:@"isGlowOn"]; 
    [myDict writeToFile:pathSettingFile atomically:NO]; 

    [myDict release]; 
    [pathSettingFile release]; 
} 

答えて

6

を参照してください。あなたはメインバンドルからしか読むことができません。ファイルを書きたい場合は、アプリケーションのドキュメントディレクトリに配置する必要があります。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]]; 

編集:

あなたがメインバンドルからのplistが必要な場合は、あなたがそれを修正するドキュメントディレクトリへの最初のそれをコピーすることができます。お返事のための

NSError *error; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if (![fileManager fileExistsAtPath: path]){ 
     NSLog(@"File don't exists at path %@", path); 

     NSString *plistPathBundle = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"]; 

     [fileManager copyItemAtPath:plistPathBundle toPath: path error:&error]; 
    }else{ 
     NSLog(@"File exists at path:%@", path); 
    } 
+0

おかげで、うまく動作します、私はuが推奨されるコードを試してみましたVEの、かなり論理的なようだが、私はすぐそこに置かれ、それをましても、ファイルがパス上に存在しないかのような状態に入りますリソースフォルダ:)ファイル名の綴りもチェックしましたが、それで助けてください:) – MGD

+0

ドキュメントディレクトリがどこにあるのか分からないようです。 – MGD

+0

nslogをパントしてコンソールにパスを取得し、compを参照してファイルを表示できます。私はコードにアクセスするだけです。 –

1

を書かれているコードです。彼らは読書のためのものです。アプリケーションのdocumnetsディレクトリに同じ(plistファイル)を作成してみてください。

0

[myDict writeToFile:pathSettingFile atomically:NO];は何を返しますか?私はあなたのファイルに書き込むことはできないと思う。

は、あなたがメインバンドルに書き込むことはできませんthis答え