2011-03-31 82 views
0

如果互聯網連接不可用,我正在解析文件中的數據。當我在iPhone模擬器中測試它時,它完美地工作。當我切換到設備時失敗。當我保存並加載數據時,我使用了相同的名稱,但沒有區別。可能是什麼問題呢?NSData在模擬器中加載,但不在設備上

- (void)parseXMLFileAtURL:(NSString *)URL 
{ 
    events = [[NSMutableArray alloc] init]; 

    NSURL *xmlURL = [NSURL URLWithString:URL]; 

    NSString* xml = [[NSString alloc]initWithContentsOfURL:xmlURL]; 
    NSData * xmlData = [xml dataUsingEncoding:NSUTF8StringEncoding]; //[[NSData alloc]initWithContentsOfURL:xmlURL]; 
    if (xmlData != nil) { 
     fileParser = [[NSXMLParser alloc] initWithData:xmlData]; 
     HBSaveData(xmlData, @"/xml.plist"); 
     NSLog(@"backup made %@ " ,xmlData); 
    } else { 
     xmlData = [[[NSData alloc]initWithData:HBLoadData(@"/xml.plist")]retain]; 

     fileParser = [[NSXMLParser alloc]initWithData:xmlData]; 
     networkConnected = YES; 
     NSLog(@"backup used %@ " ,xmlData); 
    } 

    [fileParser setDelegate:self]; 

    [fileParser setShouldProcessNamespaces:NO]; 
    [fileParser setShouldReportNamespacePrefixes:NO]; 
    [fileParser setShouldResolveExternalEntities:NO]; 

    [fileParser parse]; 

} 

這是我有這樣的第二個問題,我不明白爲什麼。我已經使用了其他方法保存文件3次,現在這個時候它不想工作。我的其他問題仍未得到答覆。

這裏是保存和加載功能

static void HBSaveData(NSData *data, NSString* savePath){ 
    NSString *filePath = pathOfFile(savePath); 
    NSString *errString; 
    NSData *serialized = 
    [NSPropertyListSerialization dataFromPropertyList:data 
              format:NSPropertyListBinaryFormat_v1_0 
           errorDescription:&errString]; 

[serialized writeToFile:savePath atomically:YES]; 

if (errString) 
{ 
    NSLog(@"%@" ,errString); 
    [errString release]; // exception to the rules 
} 


//[data writeToFile:filePath atomically:YES]; 
NSLog(@"%@", filePath); 

}

static NSData* HBLoadData(NSString* savePath) { 
    NSString *filePath = pathOfFile(savePath); 

    NSString *errString; 
    NSData *serialized = [NSData dataWithContentsOfFile:savePath]; 



NSData* data = 
[NSPropertyListSerialization propertyListFromData:serialized 
           mutabilityOption:NSPropertyListMutableContainers 
              format:NULL 
           errorDescription:&errString]; 

if (errString) 
{ 
    NSLog(@"%@" ,errString); 
    [errString release]; // exception to the rules 
} 
return data; 

}

static inline NSString* pathOfFile(NSString * savePath){ 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsFolder = [paths objectAtIndex:0]; 
return [documentsFolder stringByAppendingPathComponent:savePath]; 

}

我執行測試和搜索的內容文件di在閱讀和寫作的教區。在模擬器上我有這個。

2011-03-31 08:05:39.117 AnimeSTL [5992:207]所有文件( 「myEventId.plist」, 「myEvents.plist」, 「myListEvents.plist」, 「xml.dat」 )

在設備上我得到這個

2011-03-31 08:11:10.019 AnimeSTL [134:307]所有文件( 「myEventId.plist」, 「myEvents.plist」, 「myListEvents.plist」 ) 該文件沒有被保存爲som原因。

編輯: 寫入失敗,所以我輸出文件路徑。是否因爲iphones無法處理.dat類型的文件?

2011-03-31 09:48:50.954 AnimeSTL [196:307]的所有文獻( 「myEventId.plist」, 「myEvents.plist」, 「myListEvents.plist」 ) 2011-03- 31 09:48:50.960 AnimeSTL [196:307]寫入失敗 2011-03-31 09:48:50.962 AnimeSTL [196:307]/var/mobile/Applications/FCB4AA53-5450-495B-A190-930535335301/Documents/xml.dat

回答

1

請記住,iOS文件系統區分大小寫,而Mac OS X文件系統通常不是。因此,如果您的文件實際上被稱爲「XML.plist」而不是「xml.plist」,那麼它將在模擬器上工作,但不在設備上。

+0

當我保存文件時,它以全部小寫字母保存,所以我以同樣的方式調用它。如果您查看兩個HBSave/Load數據,則傳入的字符串是相同的。該字符串被附加到文件靜態函數的路徑中,並傳遞給保存數據函數。我以某種方式改變事物?當我這樣做時,我很睏倦。 – Ohmnastrum 2011-03-31 12:51:09

+0

我發現在設備上文件沒有被保存到文檔目錄中。我決定調用這個:NSLog(@「All documents%@」,[[NSFileManager defaultManager] directoryContentsAtPath:documentsFolder]);並出現4個文件中的三個。 – Ohmnastrum 2011-03-31 13:02:43

+0

看着你的代碼,你應該改變@「/ xml.plist」到@「xml.plist」。 -stringByAppendingPathComponent:將負責插入路徑分隔符。 – Caleb 2011-03-31 13:33:39

0

/xml.plist文件的完整路徑(xml.plist在根文件夾中),還是在HBSaveData()中被修改的路徑?

如果這是實際的路徑,那可能是您的問題 - iOS只允許您在特定於您的應用的文件夾中寫入文件系統。看看使用NSSearchPathForDirectoriesInDomains()找到你的應用程序的文檔文件夾。

+0

我已經添加了保存和加載數據所涉及的其餘代碼。我不認爲我以任何方式修改字符串。或者我是? – Ohmnastrum 2011-03-31 12:48:42

相關問題