Я рад видеть, что мой код оказывается полезным! :)
CHCSVParser
по поведению похож на NSXMLParser
в том, что каждый раз, когда он находит что-то интересное, он сообщит вам об этом через один из обратных вызовов делегата. Однако, если вы решите игнорировать данные, которые он вам дает при обратном вызове, то он исчезнет. Эти парсеры (CHCSVParser
и NSXMLParser
) довольно глупы. Они просто знают формат материала, который они пытаются проанализировать, но на самом деле ничего особенного не делают.
Таким образом, ответ, в двух словах, таков: «Вы должны спасти его сами». Если вы посмотрите на код для категории NSArray
, вы увидите в файле .m, что он использует простой подкласс NSObject
в качестве делегата синтаксического анализатора , и этот подкласс является тем, что объединяет поля в массив, а затем добавив этот массив в общий массив. Вам нужно будет сделать что-то подобное.
Пример делегата:
@interface CSVParserDelegate : NSObject <CHCSVParserDelegate> {
NSMutableArray * currentRow;
}
@end
@implementation CSVParserDelegate
- (void) parser:(CHCSVParser *)parser didStartLine:(NSUInteger)lineNumber {
currentRow = [[NSMutableArray alloc] init];
}
- (void) parser:(CHCSVParser *)parser didReadField:(NSString *)field {
[currentRow addObject:field];
}
- (void) parser:(CHCSVParser *)parser didEndLine:(NSUInteger)lineNumber {
NSLog(@"finished line! %@", currentRow);
[self doSomethingWithLine:currentRow];
[currentRow release], currentRow = nil;
}
@end
Тем не менее, я мог бы быть убежден, что нужно изменить поведение синтаксического анализатора для агрегирования самой строки, но если я пойду по этому пути, почему бы просто не собрать синтаксический анализатор для всего файла? (Ответ: не должно)