2012-04-20 8 views
0

私のコードはこれです。 retの値は常にNOです。書き込みパスは許可されていないと思います。 私のアプリケーションのMAC OS Xに私の情報をどこに保存できますか?アプリの設定を保存するための正しい方法を見つける手助けはできますか?ありがとうございます〜:)MAC OS X NSMutableDictionary writeToFileが失敗する

NSString* writePath = [[[NSBundle mainBundle] resourcePath] 
         stringByAppendingPathComponent:@"Brain.plist"]; 

NSLog(@"%@",writePath); 
NSMutableDictionary* dictForRet = [[NSMutableDictionary alloc]init]; 
NSNumber* applicationNumber = [[NSNumber alloc]initWithInt:0]; 
NSMutableDictionary* root = [[NSMutableDictionary alloc]init]; 
NSArray* propertyArray = [[NSArray alloc]initWithObjects:kPropertyArrayApplicationPath,kPropertyArrayApplicationCS, nil]; 
NSMutableDictionary* brain = [[NSMutableDictionary alloc]init]; 
[root setObject:propertyArray forKey:kPropertyArrayName]; 
[dictForRet setObject:applicationNumber forKey:kPropertyKeyApplicationNumber]; 
[dictForRet setObject:root forKey:kPropertyArrayDictName]; 
[dictForRet setObject:brain forKey:kPropertyDictBrainName]; 
NSLog(@"%@",dictForRet); 
ret = [dictForRet writeToFile:writePath atomically:YES]; 
NSLog(@"%d",ret); 

答えて

0

現在のアプリケーションのバンドルに書き込むことはできません。

代わりに、サンドボックスに入れて、~/Library/Application Support/YOUR_APP/、またはユーザーが指定した場所に埋め込むことができます。

+0

しかし、どのようにデフォルトのplistファイルの設定を変更できますか?すべての設定ファイルを "〜/ Library/Application Support/YOUR_APP /"というパスに書き換える必要がありますか?そして、どのように私はカカオコードで位置を取得することができます.PS:アプリケーションはサンドボックスされていません。 – RetVal

+0

バンドルされたファイルを参照として使用し、そのコピーを別の場所に保存します(「〜/ライブラリ/ Application Support/YOUR_APP /」など)。場合によっては、 'NSUserDefaults'にいくつかの情報を保存したいかもしれません。 – justin

+1

Application Supportフォルダはサンドボックスではありません。サンドボックスアプリケーションでは、サンドボックスコンテナディレクトリは別の場所(ライブラリ/コンテナ、IIRC内)にあり、Application Supportディレクトリはその内部にあります。 –

2

リソースパスは、アプリケーションバンドルのResources /ディレクトリを参照します。通常は許可されていないこのパスに書き込む必要はありません(特にサンドボックスアプリケーションの場合)。

標準の場所へのパスを取得するには、Application SupportディレクトリのようにNSSearchPathForDirectoriesInDomainsを使用します。

あなたは、おそらくのようなものを探している:これはアプリがサンドボックス化されている場合、自動的に正しい道を選んで、アプリケーションサポートのURL(サイズ1の配列)を返します

NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); 

+0

申し訳ありませんが、アプリはサンドボックスではなく、LIONで動作しています。そして、私のクラスは私のアプリケーションのアプリケーションサポートディレクトリのフルパスをどのように取得できますか? "/ Users/xxxx/Library/Application Support/myApplication /"など – RetVal

+0

ライオンアプリは、サンドボックス化することができます(また、アプリストアからリリースされる場合もあります)。ただし、NSSearchPathForDirectoriesInDomainsを使用すると、サンドボックス化されているかどうかにかかわらず、両方のタイプのアプリケーションの正しいディレクトリが返されます(これはシステム関数を使用する利点です)。この関数が返すパスにアプリケーション名を追加するだけです。 –

+0

私はすでにこのコードを実行しようとしており、リターンパスは "/ Users/xxxx/Library/Application Support"です。そして、私はos xのプログラミングを学び始めます。あなたは私が文書や簡単なサンプルコードを見つけるのを助けることができるいくつかのキーワードを与えます。ありがとうございました。 – RetVal

関連する問題