0

私のコードはここにあります:

-(void)loadDataFromDisk
{
    [dict release];
    NSMutableData* data = [NSMutableData dataWithContentsOfFile:[self pathForDataFile]];
    NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    dict = [[unarchiver decodeObjectForKey:fileKey] retain];
    [unarchiver finishDecoding];
    [unarchiver release];

    if(dict == NULL)
    {
    NSLog(@"First time in.");
    dict = [[NSMutableDictionary alloc] init];
    }
}

-(void)saveDataToDisk
{
    NSMutableData* data = [NSMutableData data];
    NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

    [archiver setOutputFormat:NSPropertyListBinaryFormat_v1_0];

    // EncodeObject will automatically encode every primitive inside 'dictionaryToSave', 
    // As for objects, the object class must conform to NSCoding Protocol, else an error will occur.
    [archiver encodeObject:dict forKey:fileKey];
    [archiver finishEncoding];
    [archiver release];

    [data writeToFile:[self pathForDataFile] atomically:YES];    
}

-(NSString*)pathForDataFile
{
     NSArray* documentDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);

    NSString* path = nil;
    if (documentDir) 
    {
        path = [documentDir objectAtIndex:0];    
    }
    else
    {
        NSLog(@"error in [PersistentHandler pathForDataFile]");
    }
    // Returns 'directory'/data.bin to method(saveDatatoDisk/loadDataFromDisk)
    return [NSString stringWithFormat:@"%@/%@", path, @"data.bin"];
}

指定されたfileKey(つまり「ボタン」)でファイルを1回保存すると機能しますが、指定されたfileKey(つまり「時計」)で別のファイルをディスクに保存したい場合は、「ボタン」が上書きされます。 「時計」が付いているので、「ボタンに再びアクセスすることはできません。

このジレンマを修正する方法は?「saveDataToDisk」(アーカイブ)の方法である必要があると思います。各ファイルを最新のファイルに置き換えるのではなく、大量のファイルをディスクに書き込む必要があります。

4

2 に答える 2

1

常に「〜/ Documents / data.bin」に書き込んでいます—pathForDataFileメソッドは常にそのパスを返します。別のファイルに保存する場合は、別のファイルに書き込む必要があります。

于 2011-12-14T00:33:59.517 に答える
1

私があなたのコードを間違って読んでいない限り、あなたは常に同じパスを使用してファイルを保存しています。それが上書きしている理由です。

return [NSString stringWithFormat:@"%@/%@", path, @"data.bin"];

ファイルを保存するたびに/path/you/retrieve/data.binにあります

ファイル名、またはそれが保存されているディレクトリを変更する必要があります。同じファイル名を保持したい場合は、保存するたびに新しいディレクトリを作成し、タイムスタンプまたは自分の説明でディレクトリにラベルを付けます。保存します。

于 2011-12-14T00:34:39.080 に答える