2013-08-18 3 views
1

NSCoding을 사용하여 데이터를 plist에 저장하면 this guide을 따라 왔습니다. 나는 샘플 코드를 살펴볼뿐만 아니라 말할 수있는 한 가이드 단계를 밟았지만, 실제로 데이터를 저장하는 경우에는 저장하지 않는 것처럼 보이거나 호출하지 않는 것처럼 보입니다. 저장 함수. 버튼이 로그를 클릭 그래서iPhone - plist 파일에 데이터 저장

- (IBAction)saveAll:(id)sender { 
    NSLog(@"start saveall"); 
    _conosirDoc.data.wineType = _wineType.text; 
    _conosirDoc.data.wineTitle = _wineTitle.text; 
    _conosirDoc.data.wineYear = _wineYear.text; 
    _conosirDoc.data.wineVolume = _wineVolume.text; 
    _conosirDoc.data.wineRating = _wineRating.text; 
    _conosirDoc.data.wineCountry = _wineCountry.text; 
    _conosirDoc.data.wineRegion = _wineRegion.text; 
    _conosirDoc.data.wineGrapes = _wineGrapes.text; 
    [_conosirDoc saveData]; 
    NSLog(@"%@", _conosirDoc.data.wineType); 
    NSLog(@"end saveall"); 
} 

읽기 : 나는이 버튼을 통해 저장 기능을 호출하고있어

start saveall 
(null) 
end saveall 

그래서 거기에서 나는하여하고 saveData 기능에 NSLog의 다음 설정 :

- (void)saveData { 
    NSLog(@"being called?"); 
    if (_data == nil) return; 
    NSLog(@"START"); 
    [self createDataPath]; 
    NSLog(@"END"); 
    NSString *dataPath = [_docPath stringByAppendingPathComponent:kDataFile]; 
    NSLog(@"%@", dataPath); 
    NSMutableData *data = [[NSMutableData alloc] init]; 
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
    [archiver encodeObject:_data forKey:kDataKey]; 
    [archiver finishEncoding]; 
    [data writeToFile:dataPath atomically:YES]; 

} 

그리고이 NSLog는 출력에 나타나지 않으며 제대로 호출되지 않는 이유는 없습니다. 더 이상 정보가 필요하면 알려주세요.

감사합니다.

답변

0

당신이 볼 (특히 당신이 보이지 않는 것들) _conosirDocnil을 나타냅니다 로그 라인 -가 초기화되지 않은 다음 saveData는 무조건 "being called?"를 기록하지 않을 유일한 이유는 saveData가 호출 될 것입니다 a nil. 다른 모든 경우에는 최소한 추가 로그 라인이 있습니다.

당신은 그것이 작동되도록하려면 _conosirDoc 변수에 객체를 할당하는 코드를 추가해야합니다

_conosirDoc = [[ConosirDocType alloc] init]; 

_conosirDoc의 실제 유형 위 ConosirDocType를 교체합니다.