2012-06-22 2 views
0

내 앱은 SplitView 유형이며 UITableView을 사용하여 사이트 이름을 표시합니다. didSelectRowAtIndexPath 방법에서, 나는 코드의 라인을 다음을 사용하고 있습니다 : 나는 사이트가 NSDictionary "DICT"에 타임 스탬프 alongwith 방문의 URL을 추가하려고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]; 

. 나는 viewDidLoad 메서드에서 포맷터를 초기화했다. History는 사전 목록을 저장하는 배열입니다.

나는 viewDidLoad 방법 다음 코드 줄을 사용하고 있습니다 :

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

내가 이미 기존 파일 space.txt에 방문 새 사이트의 이름을 추가하고 싶다.

그러나 단 하나의 이름 (마지막으로 방문한 사이트의 URL)이 나타납니다. 새로 방문한 siteNames를 기존 파일 space.txt에 어떻게 추가 할 수 있습니까? 이 문제를 해결할 수 없습니다.

감사합니다.

+0

dict를 추가하고 기록을 인쇄하고 값을 확인한 다음 @Rajesh가 내역이 nil인지 여부를 확인하는 것이 좋습니다. –

답변

0

코드도 사용할 수 있습니다. viewDidLoad에서 "history"객체를 할당했는지 확인하십시오. 그렇지 않다면 만드십시오.

+0

잘 예 .. 롤 .. viewDidLoad에서 역사 개체를 할당 너무 일했습니다! 고마워요 !! 이 한 줄이 작업을했습니다 :: \t "history = [[NSMutableArray alloc] init];" – gamersoul

+0

하지만이 메모리 할당에 대한 추론을 할 수 있습니까? 나는 AliSoftware의 진술과 혼동을 느낀다. – gamersoul

+0

개체에 메모리를 할당하지 않고 그 값을 추가하는 경우 프로세서가 데이터 임시 메모리를 저장한다는 의미이며 범위가 완료 될 때마다 임시 데이터가 제거됩니다. 따라서 할당 범위 밖에서이 세부 정보를 사용할 수 없게됩니다. 귀하의 경우에는 추가 할 데이터가 임시 메모리에 저장 될 때마다 범위에서 추가 된 데이터가 제거됩니다.그래서 매번 미리 지정된 할당 된 데이터 만 저장합니다. – Rajesh

0

NSMutableDictionary (NSDictionary가 아닌)를 사용하여 변경할 수있는 사전 (= 수정할 수 있음)을 사용하십시오.


부록 : 당신이 바로 다음 줄에 변수 "DICT"를 reaffect로 라인 dict = [[NSDictionary alloc] init];이 완전히 쓸모가 참고. 예를 들어, int a = 5; 다음에 a=8이 붙은 다음 이전 변수에 있던 값이 새 값으로 바뀌고 이전 값 (사용자의 [[NSDictionary alloc] init])이 손실됩니다.

+0

kz .. NSMutableDictionary를 사용하여 시도해 보았고 여러분이 지적한 줄을 삭제했습니다. 코드가 여전히 작동하지 않습니다. 즉, 마지막으로 방문한 사이트 만 파일 space.txt에 기록됩니다. -/ – gamersoul

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

나는 이것이 유용 할 수 있다고 생각합니다.

+0

예 .. 해결했습니다! 고마워 :) :) – gamersoul

관련 문제