如果互聯網連接不可用,我正在解析文件中的數據。當我在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
當我保存文件時,它以全部小寫字母保存,所以我以同樣的方式調用它。如果您查看兩個HBSave/Load數據,則傳入的字符串是相同的。該字符串被附加到文件靜態函數的路徑中,並傳遞給保存數據函數。我以某種方式改變事物?當我這樣做時,我很睏倦。 – Ohmnastrum 2011-03-31 12:51:09
我發現在設備上文件沒有被保存到文檔目錄中。我決定調用這個:NSLog(@「All documents%@」,[[NSFileManager defaultManager] directoryContentsAtPath:documentsFolder]);並出現4個文件中的三個。 – Ohmnastrum 2011-03-31 13:02:43
看着你的代碼,你應該改變@「/ xml.plist」到@「xml.plist」。 -stringByAppendingPathComponent:將負責插入路徑分隔符。 – Caleb 2011-03-31 13:33:39