如何将数组数据传递给另一个方法

时间:2011-09-16 01:16:30

标签: iphone ios uitableview nsxmlparser

我正在连接到一个数据库,然后获取一堆我用NSXMLParser解析的xml(如下所示)一旦完成,我想将数组数据传递给另一个方法对其进行排序然后分离数组分段(这是我的uitableview索引将工作)。最后显示在我的tableview中。

我的主要问题是我如何(在代码中的哪个位置)将数据数组传递给我创建的方法。

#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 个答案:

答案 0 :(得分:1)

这会有用吗?

- (void)parserDidEndDocument:(NSXMLParser *)parser {
    [self startSortingTheArray:myDataArray];
}

答案 1 :(得分:1)

为NSXMLParser实现didEndDocument委托方法, 如果你的 - (IBAction)startSortingTheArray :( NSMutableArray *)arrayData返回类型是非IBAction,让我们说它的返回类型是void,以下应该可以正常工作。我不知道将arrayData传递给IBAction返回类型方法时会发生什么。

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
   [self startSortingTheArray:myDataArray];
}

答案 2 :(得分:0)

不太确定问题 - 您希望将数组传递给其他方法,您的startSortingTheArray:方法似乎已正确定义,您已经可以[self startSortingTheArray:myDataArray]

在tableview中显示结果时 - 考虑将内容转换为字典数组。您可以轻松地尝试使用一个平面阵列来完成它。每个字典都可以包含一个数组,用于定义该部分中的每一行以及该部分的标题。当需要获取节或行的计数时,您只需计算顶级数组中的项数(节数)或计算包含字典中行信息的数组中的项数(行数)。 / p>

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