Парсинг моего плоского файла на iPhone - это боль в ***, пожалуйста, помогите мне - PullRequest
0 голосов
/ 03 сентября 2010

Я программирую приложение для iPhone, которое должно анализировать плоский файл из Интернета, создавать управляемые объекты из плоского файла, а затем отображать их в UITableView.Нет проблем с сохранением и отображением, но я просто не могу освоить хороший парсер.

Вот файл, который я хочу проанализировать: Плоский файл

Насколько я знаю, я не могу использовать NSXMLParser для этой задачи (потому что, очевидно, естьбез тегов).

Поэтому я сначала попытался запрограммировать сканер NSS, который должен дать мне интересные свойства -> не сработало

Теперь я использую этот метод:

- (void) parseMemberDataWithURL: (NSString *)urlString
{
    self.memberTempCounter = 1;

    //Get data from web
    self.downloadedText = [NSString stringWithContentsOfURL: [NSURL URLWithString:    urlString] encoding:NSUTF8StringEncoding error:nil ];

    memberArray = [downloadedText componentsSeparatedByString:@";"];

    while (self.memberTempCounter<[memberArray count])
    {
        [[ExhibitorController sharedController] createExhibitorWithName:[memberArray objectAtIndex:self.memberTempCounter]
                                                                  street:[memberArray objectAtIndex:self.memberTempCounter+2]
                                                                    zip:[memberArray objectAtIndex:self.memberTempCounter+3]
                                                                   city:[memberArray objectAtIndex:self.memberTempCounter+4]
                                                                  email:[memberArray objectAtIndex:self.memberTempCounter+7]
                                                                  phone:[memberArray objectAtIndex:self.memberTempCounter+5]
                                                                website:[memberArray objectAtIndex:self.memberTempCounter+8]
                                                        produktbereiche:[[memberArray objectAtIndex:self.memberTempCounter+9] componentsSeparatedByString:@","]];
        self.memberTempCounter= self.memberTempCounter+13;
    } 
}

Я использую memberTempCounter для идентификации свойства.

Проблемы:

  • Это работает только как 3 из 4 раз.1 из 4 разприложение вылетает, и я понятия не имею, почему ...
  • Этот метод имеет производительность, подобную VW Beetle 1962 года.На моем iPhone 3G

анализ всей части данных занимает до 3 минут. Есть идеи или более простой способ сделать это?

Я был бы очень благодарен.Заранее спасибо: -)

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

Вы можете также выполнить весь анализ в фоновом режиме, а затем отобразить его при разборе информации.

Что касается проблем с памятью, попробуйте выполнить временные пулы автоматического выпуска и выпускать каждые 50 или около того итераций в цикле.

int count = 0;
NSAutoreleasePool * loopPool = [[NSAutoreleasePool alloc] init];
while(someInsanelyLargeCondition){

    // Do your stuff here
    // .............

    count++;
    if (count > 50) {
        count = 0;
        [loopPool release];
        loopPool = [[NSAutoreleasePool alloc] init];
    }
}
0 голосов
/ 07 сентября 2010

Я наконец смог исправить проблему с производительностью.

У меня есть метод в другом классе, который рекламирует теги для разных участников.Поэтому он сначала проверяет, сохранен ли тег в базе данных или же создает его.Из-за растущего набора тегов в моей базе данных процесс поиска занимал все больше и больше времени, и это приводило к длительному разбору.

У кого-то еще возникла эта проблема: посмотрите руководство Apple по программированию Performance Core Data Programmingв разделе «Реализация поиска или создания эффективно»:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html

0 голосов
/ 03 сентября 2010

Парсеры с рекурсивным спуском (LL1) довольно просты, не требуют много памяти, и по скорости они работают почти так же быстро, как вы можете перемещать указатель через символы.Построение вашей структуры данных, вероятно, заняло бы много времени.

...