2012-06-22 187 views
0

我的应用程序是SplitView类型,我使用UITableView来显示网站的名称。在didSelectRowAtIndexPath方法,我使用的代码行如下::将数据附加到NSDictionary

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]; 

我想要的网站访问非常久远的时间戳到NSDictionary“字典”添加URL。我已经在viewDidLoad方法中初始化格式化程序。 History是存储字典列表的数组。

我用下面的代码行viewDidLoad方法:

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

我要追加新址参观到已存在的文件space.txt名称。

但是,只有一个名称出现(上次访问的网站的网址)。如何将新访问的siteNames追加到我现有的文件space.txt中?我无法解决这个问题。

感谢和问候。

+0

添加字典之后,打印历史记录并验证值?并且@Rajesh建议检查您的历史记录是否为零? –

回答

0

你也可以使用你的代码。请检查您是否在viewDidLoad中分配了“history”对象。如果没有,请制作。

+0

好的..大声笑..分配历史对象在viewDidLoad工作太!非常感谢 !!这1个单行做了这项工作:: \t“history = [[NSMutableArray alloc] init];” – gamersoul

+0

但你能否告诉我一些推理的内存分配?我对下面的AliSoftware的说法感到困惑。 – gamersoul

+0

如果你没有为一个对象分配内存,并且你正在为它添加一些值,那么意味着处理器将保存数据临时内存,并且每当该范围完成时它将删除临时数据。所以你不能在分配范围之外使用这些细节。在你的情况下,每次你追加的数据都被保存到临时内存中,并且在该范围之后它将删除添加的数据。这样每次只保存预设分配的数据。 – Rajesh

0

使用一个NSMutableDictionary(而不是一个NSDictionary)有一个可变的字典(=可以修改)。


附录: 请注意,您的线路dict = [[NSDictionary alloc] init];是完全无用的,因为你reaffect在非常下一行的变量“字典”。这就好比如果你这样做:int a = 5;后面跟着a=8,当然这个变量之前的值被新的值替换,并且之前的值(你的cas中的你的[[NSDictionary alloc] init])丢失了。

+0

kz ..我也尝试过使用NSMutableDictionary,并删除了你指定的行。该代码仍然无法正常工作,即仍然只有最后访问的网站正在写入文件space.txt: -/ – gamersoul

0

您正在创建的对象(“字典”)每次都有所不同。意味着你只需在字典中添加选定的细节并写入。所以你不能看到以前保存的细节。检查以下代码以将新访问的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]; 
} 

我觉得这很有用。

+0

是的..这个解决了!非常感谢:) :) – gamersoul