2011-12-21 16 views
4

私は次のように操作メインバンドルに書き込みが例えば... iOS版では不可能であることをかなり確信していた:メインバンドルディレクトリに書き込みます。許可されていますか?

NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 
.....something 
[xmlData writeToFile:path atomically:YES]; 

なぜApple's documentation使用中の最初の例は、この正確なコードのでしょうか?

答えて

3

の例はIOSのような権限を持つほど厳密ではないOS X、のためのものです。

でも、Mac App Storeアプリケーションバンドルでもっと長い時間(そういったことがあれば)できるのであれば驚いています。

ドキュメントに関するバグを報告する価値があります。

+0

OSXのドキュメントをiOSのドキュメントで見つけるのは時々起こりますが、今度は私を驚かせました。@OMZがシミュレータで言うように、うまくいくので、ひどいエラーになります!開発者は誤ってこのメソッドをそのアプリケーションで使用すると思うかもしれません... – MatterGoal

+0

デバイス上のテストがとても重要なもう一つの理由! – jrturton

2

これはメインバンドルへのリンクではありません。それはresourcesフォルダーへのパスで、そのフォルダー内のplistです。アプリをコンパイルするときに、メインバンドル内

したがって、関数名pathForResource...

すべてが暗号で署名されています。しかし、リソースフォルダはありません。自由に書き込むことができます。

@jrturton

// we need to get the plist data... 
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Symptoms" ofType:@"plist"]; 
    NSMutableArray *dataArray = [[NSMutableArray alloc] initWithContentsOfFile:plistPath]; 

    // add a new entry 
    NSDictionary *addQuestion = [[NSDictionary alloc] initWithObjectsAndKeys:@"Blank.png",@"Icon", 
           [NSString stringWithFormat:@"%i",r],@"ID", 
           [titleTextField text],@"Title", 
           [questionTextField text],@"Text", 
           qnType,@"Type", 
           @"1",@"Custom", 
           [NSArray arrayWithObjects:@"Yes",@"No",nil],@"Values", 
           [unitsTextField text],@"Units", 
           nil]; 
    [dataArray addObject:addQuestion]; 
    [addQuestion release]; 

    // rewrite the plist 
    [dataArray writeToFile:plistPath atomically:YES]; 
+0

したがって、どのようにストアファイルを選択しましたか?ドキュメントフォルダをiTunesのファイルを表示する機能としていますが、ライブラリパスとリソースパスの違いは何ですか? – MatterGoal

+0

私はこれを間違っていると確信していますが、私は私を裏付けるための文書を見つけることができません。リソースフォルダはメインバンドルの一部であり、デバイス上で変更することはできません。 – jrturton

+0

デバイスでこれを実行しようとすると、 "操作が許可されていません"というエラーが表示されます(シミュレータのアプリケーションがコード化されていないため、シミュレータで動作します)。 – omz

関連する問題