我正在连接到一个数据库,然后获取一堆我用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
{
}
答案 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
。