1

こんにちは、ファイルからデータを読み込もうとしています

この関数は、データをドキュメント フォルダー内のファイルに保存します。

- (IBAction)saveUser:(id)sender{
   NSString *name = [nameField stringValue];
   NSString *weight = [weightField stringValue];
   NSDate *date = [datePick dateValue];

   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *documentsDirectory = [paths objectAtIndex:0];

   NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
   [dict setValue:[nameField stringValue] forKey:@"name"];
   [dict setValue:[weightField stringValue] forKey:@"weight"];
   [dict setValue:date forKey:@"date"];
   [dict writeToFile:name atomically:YES];
}

ただし、ファイルをロードしてそこからデータを取得しようとすると、できません。これがどのように行われるか教えてください。


loadFunction を表示するように編集

-(IBAction)loadUser:(id)sender{
 NSString *weight = [weightField stringValue];
 NSDate *date = [datePick dateValue];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *loadPath = [documentsDirectory stringByAppendingPathComponent:name];

NSMutableDictionary *savedData = [[NSMutableDictionary alloc] initWithContentsOfFile: name]; 
 NSLog(@"%@", weight);
}
4

2 に答える 2

4

あなたの答えを修正します。これが機能するコードです。ファイル名はほとんど指定していません。

NSString *filename = [documentsDirectory stringByAppendingPathComponent:@"file.txt"];

そして、あなたがファイルを書くあなたの行で:

[dict writeToFile:name atomically:YES];

このように、名前をファイル名に変更する必要があります

[dict writeToFile:filename atomically:YES];

そして、あなたのロードデータメソッドでは:

NSString *filename = [documentsDirectory stringByAppendingPathComponent:@"file.txt"];

NSMutableDictionary *savedData = [[NSMutableDictionary alloc] initWithContentsOfFile:filename]; 

NSLog(@"The weight is : %@", [savedData valueForKey:@"weight"]);
于 2012-10-19T11:57:00.120 に答える
1

以下は、意図したとおりに動作するようです (コード内の UI 要素の依存関係を除く)。

#import <Foundation/Foundation.h>

static NSString *pathToDocuments(void) {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    return [paths objectAtIndex:0];
}

int main(int argc, char *argv[]) {
    NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];

    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setValue:@"SomeName" forKey:@"name"];
    [dict setValue:@"SomeWeight" forKey:@"weight"];
    [dict setValue:[NSDate date] forKey:@"date"];

    NSString *filePath = [pathToDocuments() stringByAppendingPathComponent:[dict objectForKey:@"name"]];
    [dict writeToFile:filePath atomically:YES];

    [dict release];  dict = nil;

    NSLog(@"%s - Confirming dict is nil: %@",__FUNCTION__,dict);

    dict = [[NSDictionary dictionaryWithContentsOfFile:filePath] mutableCopy];
    NSLog(@"%s - weight = %@",__FUNCTION__,[dict objectForKey:@"weight"] );

    [p release];
}

これにより、次がコンソールに出力されます。

2012-10-19 06:40:38.691 Untitled[10633:707] main - Confirming dict is nil: (null)
2012-10-19 06:40:38.693 Untitled[10633:707] main - weight = SomeWeight

編集:

とはいえ、問題はファイルパスにあると思いますloadUser...

于 2012-10-19T11:41:55.697 に答える