2013-08-18 245 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 

所以從那裏我設置以下的NSLog的在SAVEDATA功能:

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

} 

因此,這些NSLogs都沒有出現在輸出中,我無法弄清楚它爲什麼沒有被正確調用。讓我知道你是否需要任何信息。

謝謝。

回答

0

,你看到(特別是你看不到的)表明,_conosirDocnil日誌線 - 它沒有被初始化:在saveData將無法​​登錄無條件"being called?"的唯一原因是,saveData上調用一個nil。在所有其他情況下,至少會有另外的日誌行。

您需要添加一個對象分配給您的_conosirDoc變量的代碼,使其工作:

_conosirDoc = [[ConosirDocType alloc] init]; 

更換ConosirDocType以上的實際類型的_conosirDoc