0

私はこのコードを持っています。このコードは Document ディレクトリにファイルを作成しません。その理由がわかりません。誰が私が欠けているものを見ることができますか。「データ」辞書には必要なものが含まれていますが、writeToFile に関しては、ファイルが作成されていないため発生していません。私が持っている他のアプリでも同じコードが機能します。確かに何かが欠けています。

- (void)addBookmark{

NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]]) 
    {
        [self filePathOfBookmarks];
    }

    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];



    if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]]) 
    {
        data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
    }
    else
    {
        // If the file doesn’t exist, create an empty dictionary
        data = [[NSMutableDictionary alloc] init];
    }


    NSMutableDictionary *firstOne = [NSMutableDictionary dictionary];
    [firstOne setObject:@"one" forKey:@"name"];
    [firstOne setObject:@"two" forKey:@"call"];
    [firstOne setObject:@"twoandhalf" forKey:@"email"];
    [firstOne setObject:@"four" forKey:@"description"];

    [data setObject:firstOne forKey:@"ID"];



   [data writeToFile: [self filePathOfBookmarks] atomically:YES];

    NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
    NSLog(@"file content %@",savedStock);
}

- (NSString *) filePathOfBookmarks {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDirectory = [paths objectAtIndex:0];
    return [docDirectory stringByAppendingPathComponent:@"favourites"];
}

NSLog(@"%@",[self filePathOfBookmarks]);

これは次を返します:

/Users/spire/Library/Application Support/iPhone Simulator/5.1/Applications/40CAA37F-6477-4101-A142-D4797748ABD9/ドキュメント/お気に入り

4

2 に答える 2

0

以下のコードを参照してください。私の側では完全に機能しています。filePathOfBookmarks メソッドで正確なファイル名ではなくディレクトリに言及しただけです。favourites.txt ファイルにデータを保存できます。

iOS でのファイル処理の詳細については、以下のリンクも参照してください。

1)ファイルの保存と読み込み / ドキュメント ディレクトリを使用してファイルを保存する

2) iPhoneファイルシステム

- (void)addBookmark{

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]]) 
    {
        [self filePathOfBookmarks];
    }

    NSMutableDictionary *data;// = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];



    if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]]) 
    {
        data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
    }
    else
    {
        // If the file doesn’t exist, create an empty dictionary
        data = [[NSMutableDictionary alloc] init];
    }


    NSMutableDictionary *firstOne = [NSMutableDictionary dictionary];
    [firstOne setObject:@"one" forKey:@"name"];
    [firstOne setObject:@"two" forKey:@"call"];
    [firstOne setObject:@"twoandhalf" forKey:@"email"];
    [firstOne setObject:@"four" forKey:@"description"];

    [data setObject:firstOne forKey:@"ID"];



    [data writeToFile: [self filePathOfBookmarks] atomically:YES];

    NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
    NSLog(@"file content %@",savedStock);
}

- (NSString *) filePathOfBookmarks {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDirectory = [paths objectAtIndex:0];
    return [docDirectory stringByAppendingPathComponent:@"favourites.txt"];
}
于 2012-04-05T09:42:57.150 に答える
0

あなたのコードのいくつかは(私にとって)意味がありません。

これは何もしません:

if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]]) 
{
    [self filePathOfBookmarks];
}

次に、ブックマーク ファイルのコンテンツを使用してデータ オブジェクトを初期化します。この時点では、ファイルが存在しない可能性があります。

NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];

後でもう一度確認するため、上記の 2 つのコード ブロックは単純に省略できます。

if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]]) 
{
    data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
}
else
{
    // If the file doesn’t exist, create an empty dictionary
    data = [[NSMutableDictionary alloc] init];
}

意味あり。ただし、最初の 2 つのコード ブロックを省略した場合は、必ずデータ オブジェクトを宣言してください。

NSMutableData *data;

次に、firstOne オブジェクトをデータ ディクショナリに設定します。これは問題ないようです (このコードを使用しても、以前に既存のブックマーク ファイルから読み込まれたデータはまったく使用されません)。

データ ディクショナリの記述も問題ないようです。

[data writeToFile: [self filePathOfBookmarks] atomically:YES];

もちろん、メソッド filePathOfBookmarks は有効なファイル名を返します。

ただし、メソッドはファイルではなくディレクトリを返します。次のようにサフィックスを追加します。

return [docDirectory stringByAppendingPathComponent:@"favorites.plist"];

を使用してファイル パスの有効性を確認します。

NSLog(@"%@",[self filePathOfBookmarks]);

ファイルに書き込む前に。

また、試してみてください

NSLog(@"%@",data);

辞書を作成する前に、何が含まれているかを確認します。

それでもうまくいかない場合は、再投稿してください。

于 2012-04-05T09:51:08.750 に答える