0

私のアプリはSplitViewタイプUITableViewで、サイトの名前を表示するために使用しています。メソッドではdidSelectRowAtIndexPath、次のコード行を使用しています::

dateString = [formatter stringFromDate:[NSDate date]];
dict = [[NSDictionary alloc] init];
dict = [NSDictionary dictionaryWithObjectsAndKeys: urlString, dateString, nil];

[history addObject:dict];

NSLog(@"dateString: %@", dateString); //will let you know if it's nil or not
NSLog(@"urlString : %@", [dict objectForKey:dateString]);

NSString *docDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSLog(@"docDir is yoyo :: %@", docDir);
NSString *spaceFilePath = [docDir stringByAppendingPathComponent:@"space.txt"];
[history writeToFile:spaceFilePath atomically: TRUE];  

タイムスタンプとともにアクセスしたサイトのURLをNSDictionary「dict」に追加しようとしています。viewDidLoadメソッドでフォーマッターを初期化しました。履歴は、辞書のリストを格納する配列です。

メソッドで次のコード行を使用しましたviewDidLoad

formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

訪問した新しいサイトの名前を既存のファイルspace.txtに追加したいと思います。

ただし、表示される名前は1つだけです(最後にアクセスしたサイトのURL)。新しくアクセスしたsiteNamesを既存のファイルspace.txtに追加するにはどうすればよいですか?この問題を解決できません。

よろしくお願いします。

4

3 に答える 3

0

NSMutableDictionary(NSDictionaryではない)を使用して、変更可能な(=変更可能な)辞書を作成します。


補遺dict = [[NSDictionary alloc] init];次の行の変数「dict」に影響を与えるため、この行はまったく役に立たないことに注意してください。これは、次のようにsthgを実行した場合とまったく同じです。int a = 5;もちろんa=8、前の変数にあった値が新しい値に置き換えられ、前の値([[NSDictionary alloc] init]cas内のyour)が失われます。

于 2012-06-22T09:20:45.830 に答える
0

オブジェクト( "dict")を作成しているのは、毎回異なります。選択した詳細を辞書に追加して書き込んでいるだけです。そのため、以前に保存された詳細を表示することはできません。次のコードをチェックして、新しくアクセスしたsiteNamesを既存のファイルspace.txtに追加します。

dateString = [formatter stringFromDate:[NSDate date]];

NSString *docDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *spaceFilePath = [docDir stringByAppendingPathComponent:@"space.txt"];

if ([[NSFileManager defaultManager] fileExistsAtPath:spaceFilePath]) {
    NSMutableDictionary *appendDict = [[NSMutableDictionary alloc] initWithContentsOfFile:spaceFilePath];
    [appendDict setObject:urlString forKey:dateString];
    [appendDict writeToFile:spaceFilePath atomically: TRUE];  
    [appendDict release];
} else {
    NSMutableDictionary *appendDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:urlString, dateString, nil];
    [appendDict writeToFile:spaceFilePath atomically: TRUE];  
    [appendDict release];
}

これは便利だと思います。

于 2012-06-22T09:48:45.057 に答える
0

コードを使用することもできます。viewDidLoadで「history」オブジェクトが割り当てられているかどうかをクロスチェックしてください。そうでない場合は、作ってください。

于 2012-06-22T09:57:13.913 に答える