1

理解できません。コードのこの行が返されるのはなぜ(null)ですか?

// Get path of data.plist file to be created

plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];

新しいplistを作成する必要がありますが、理解できません。パスを取得する前に空のファイルを作成する必要があります..何かアイデアはありますか?

PS現在、プロジェクトにはh、mしかなく、plistファイルはありません。

4

2 に答える 2

7

展開後にバンドルに新しいファイルを作成しません。バンドルには、アプリに同梱されるすべてのリソースとファイルが含まれています。

代わりに、アプリの Documents フォルダーに新しいファイルを作成します。ドキュメント フォルダーのパスを取得するには、次のような方法を使用できます (一部のアプリ テンプレート プロジェクトに含まれています)。

- (NSString *)applicationDocumentsDirectory {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}

次に、使用するファイル名を追加するだけです。

NSString *path = [self applicationDocumentsDirectory];
path = [path stringByAppendingPathComponent:@"data.plist"];

整理するために、Documents フォルダーにいくつかの追加フォルダーを作成することもできます。そのために使用できますNSFileManager

于 2013-03-28T12:32:41.590 に答える
-2

はい、あなたの推測は正しかったです。最初にファイルを作成する必要があります。クラスリファレンスドキュメントがメソッドの戻り値について言わなければならなかったことは次のとおりです

"戻り値 リソース ファイルのフル パス名、またはファイルが見つからない場合は nil。 "

次のようなことができます:

if ( [ [NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"] )
    plistPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
else
    // Create new file here

また、一意のファイル名を検索する場合は、上記のメソッド呼び出しで型拡張子を省略できます。

ソース: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/Reference/Reference.html

于 2013-03-28T12:36:27.360 に答える