как передать массив данных в другой метод - PullRequest
0 голосов
/ 16 сентября 2011

В настоящее время я подключаюсь к базе данных, которая затем получает пакет XML, который я анализирую с помощью NSXMLParser (как показано ниже). Как только это будет сделано, я хотел бы передать данные массива другому методу для его сортировки, а затем разделить массивв разделы (это так мой индекс uitableview будет работать).И, наконец, отображается в моем виде таблицы.

Мой главный вопрос - как (где в коде) я могу передать свой массив данных методу, который я создал.

#pragma mark - Parsing lifecycle

- (void)startTheParsingProcess:(NSData *)parserData
{
    [myDataArray release]; // clears array for next time it is used.
    myDataArray = [[NSMutableArray alloc] init]; //initalizes the array, this is a must have!!!! :)

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //incoming parserDatapassed to NSXMLParser delegate which starts parsing process 

    [parser setDelegate:self];
    [parser parse]; //Starts the event-driven parsing operation.
    [parser release];

    //[self.tableView reloadData]; // this reloads the data in the tabel view once the nsmutablearray has been filled with values
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementName isEqual:@"item"]) {
        // NSLog(@"Found title!");
        itemString = [[NSMutableString alloc] init];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [itemString appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementName isEqual:@"item"]) {
        //NSLog(@"ended title: %@", itemString);
        [myDataArray addObject:itemString]; //this is where i pass the values over to my array.

        //TODO: Test release on memory consumption etc
        [itemString release];
        itemString = nil;
    }
}

//method to sort array and split for use with uitableview Index
- (IBAction)startSortingTheArray:(NSMutableArray *)arrayData
{

}

Ответы [ 3 ]

1 голос
/ 16 сентября 2011

Реализуйте метод делегата didEndDocument для вашего NSXMLParser, если ваш - (IBAction) startSortingTheArray: (NSMutableArray *) тип возвращаемого значения arrayData не является IBAction, допустим, его тип возвращаемого значения void, следующее должно работать нормально.Я не знаю, что произойдет, когда вы передадите arrayData в метод возвращаемого типа IBAction.

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
   [self startSortingTheArray:myDataArray];
}
1 голос
/ 16 сентября 2011

Будет ли это работать?

- (void)parserDidEndDocument:(NSXMLParser *)parser {
    [self startSortingTheArray:myDataArray];
}
0 голосов
/ 16 сентября 2011

Не совсем уверен в вопросе - вы хотите передать массив другому методу, ваш startSortingTheArray: метод, кажется, определен правильно, и вы можете сделать [self startSortingTheArray:myDataArray] уже.

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

int sectionCount = [sectionsArray count];
NSString *sectionTitle = [[sectionsArray objectAtIndex:sectionNumber] valueForKey:@"title"];
int rowCount = [[sectionsArray objectAtIndex:sectionNumber] valueForKey:@"rowContentArray"] count]; 
// rowObject might be a string, a NSValue, whatever contains the information you want in the table view cell
id rowObject = [[sectionsArray objectAtIndex:sectionNumber] valueForKey:@"rowContentArray"] objectAtIndex:rowNumber]; 

Другой подход состоит в том, чтобы поместить все ваши полученные данные в Базовые данные, которые вы, возможно, планировали сделать в любом случае, если вам требуется какая-то настойчивость. В этом случае действительно стоит использовать NSFetchedResultsController.

...