2014-10-22 2 views
0

내가 다음과 같이 NSUserDefaults를 사용하여 내 사전을 저장 특정 시간 후 그 값을 지 웁니다NSUserDefaults는

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary]; 
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"key"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

// unarchive 
NSData *newData = [[NSUserDefaults standardUserDefaults] objectForKey:@"key"]; 
NSDictionary *newDict = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

문제 : dicitionary 대부분 (일부 다른 값과 이름 값을 포함하고 있지만, 특정 기간 이후 24 시간 후), 이름 값은 나에게 ""(공백) 값을줍니다.

처음으로 이런 종류의 문제가 발생하는 경우이를 해결하는 데 도움이됩니다.
감사합니다.

+0

'NSUserDefaults'에 보관 된 객체를 쓰지 말고 대신'.plist'를 사용하여 NSDictionary를 유지하십시오. – Michael

+0

NSdata에 데이터가 있는지 여부를 확인 했습니까? nil 또는 null을 제외한 모든 값을 newData에 기록하면 보관 또는 보관시 문제가 될 수 있습니다. – Bhoomi

+0

ios 코드에이 스 니펫을 배치 한 곳입니다. –

답변

0

처음 저장하고 다음에로드 한 다음 nsdata 객체가 비어있는 경우 다시 호출 된 곳에서 코드를 배치한다고 생각합니다.

시나리오 :

1 시간 실행 애플 리케이션는 prefrences을 절약 할 수

닫기 응용 프로그램 completely.and은 다시있는 NSData 객체가 비어있는 동안 다시 prefrences을 저장하여 응용 프로그램을 열

편집

왜 사전을 NSUserD에 직접 저장하지 않습니까? efaults?

+0

답장을 보내 주셔서 감사합니다 ... 하지만 여러 번 앱을 종료/종료 한 후에도 당일에 제대로 작동합니다. – user2893370

+0

내 편집 답변을 확인 하시겠습니까? –

+0

좋은 코딩에 따라, 우리는 데이터로 객체를 저장해야합니다. – user2893370

1

이 코드에는 문제가 없습니다.

1) 신청서에 다른 수업/방법에 [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"key"]이 포함되어 있는지 확인하십시오.

2) NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary];이 비어 있지 않은지 확인하십시오 (손상되었을 수 있으며 이미 작성된 데이터가 지워질 수 있음).
문제를 확인하려면 작은 버전을 만들고 문제를 디버깅 할 수 있습니다. 코드는 다음과 같습니다.

NSMutableArray *datas = [[[NSUserDefaults standardUserDefaults] objectForKey:@"datas"] mutableCopy]; 
    if (!datas) { 
     datas = [NSMutableArray new]; 
    } 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dictionary]; 
    [datas addObject:data]; 
    [[NSUserDefaults standardUserDefaults] setObject:datas forKey:@"datas"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    // Debug code to see the result 
    NSLog(@"======= Logging saved datas"); 
    for (NSData *data in datas) { 
     NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
     NSLog(@"%@", dict); 
    } 

이 코드는 NSUserDefaults에 저장된 사전의 모든 버전을 볼 수있게되며, 빈 데이터가 저장 될 때 아마 당신이 순간을 얻을 것이다.

+1

이것은 (틀림없이 긴) 주석이며 대답이 아닙니다. – Droppy

+1

@Droppy 맞아,하지만이게 문제를 해결하는 데 도움이 될 것 같아. – l0gg3r

+0

답장을 보내 주셔서 감사합니다 ...하지만 여러 번 앱을 종료/종료 한 후에도 당일에 제대로 작동합니다. – user2893370

관련 문제