인터넷 연결을 사용할 수없는 경우 파일에서 데이터를 파싱합니다. 아이폰 시뮬레이터에서 이것을 테스트 할 때 완벽하게 작동합니다. 장치로 전환하면 실패합니다. 데이터를 저장하고로드 할 때 동일한 이름을 사용하여 대소 문자를 구분하지 않았습니다. 무엇이 문제 일 수 있습니까?시뮬레이터에서 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);
I 테스트를 수행하고, 내용에보고
static inline NSString* pathOfFile(NSString * savePath){
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsFolder = [paths objectAtIndex:0];
return [documentsFolder stringByAppendingPathComponent:savePath];
}
}
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;
} 파일 디 읽기 및 쓰기의 직책. 시뮬레이터에서 나는 이것을 가지고있다.
2011-03-31 08 : 05 : 39.117 AnimeSTL [5992 : 207] 모든 문헌 ( "myEventId.plist" "myEvents.plist" "myListEvents.plist" "xml.dat" 11 : 10.019 AnimeSTL ) 장치에
제가
이2011-03-31 08 얻을 [134 : 307] 모든 문헌 ( "myEventId.plist" "myEvents.plist" "myListEvents.plist" ) 파일이 som 용으로 저장되지 않습니다. 전자 이유.
편집 : 쓰기가 실패하여 어쨌든 파일 경로를 출력합니다. iphone이 .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
장치에서 파일이 문서 디렉토리에 저장되지 않음을 발견했습니다. 나는 이것을 다음과 같이 결정했다 : NSLog (@ "모든 문서 % @", [[NSFileManager defaultManager] directoryContentsAtPath : documentsFolder]); 4 개의 파일 중 3 개가 나타납니다. – Ohmnastrum
코드를 보면 @ "/ xml.plist"를 @ "xml.plist"로 바꿔야 할 것입니다. -stringByAppendingPathComponent : 경로 구분 기호를 삽입합니다. – Caleb