NSData загружается в симуляторе, но не на устройстве - PullRequest
0 голосов
/ 31 марта 2011

Я анализирую данные из файла, если интернет-соединение недоступно.Когда я проверяю это в симуляторе iphone, он работает отлично.когда я переключаюсь на устройство, оно выходит из строя.Когда я сохраняю и загружаю данные, я использовал одно и то же имя без разницы в регистре.В чем может быть проблема?

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

}

Iвыполнил тест и посмотрел содержимое каталога файлов при чтении и записи.на симуляторе у меня это есть.

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 ") файл по какой-то причине не сохраняется.

edit: запись не удалась, поэтому я все равно вывожу путь к файлу.потому что 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 / Документы / xml.dat

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Помните, что файловая система iOS чувствительна к регистру, тогда как файловая система Mac OS X обычно нет.Так что если ваш файл действительно называется «XML.plist» вместо «xml.plist», это будет работать на симуляторе, но не на устройстве.

0 голосов
/ 31 марта 2011

Является ли /xml.plist полным путем вашего файла (xml.plist в корневой папке), или этот путь изменяется в HBSaveData()?

Если это фактический путь, возможно, это ваша проблема - iOS позволяет вам записывать в файловую систему только те папки, которые соответствуют вашему приложению. Посмотрите, как использовать NSSearchPathForDirectoriesInDomains(), чтобы найти папку документов вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...