Objective c 解析工作正常,但数据未存储在nsMutableArray中
我正在解析一个xml文件,它可以工作,并向我显示在控制台中解析的数据(例如:Speller的处理值…),但它们不会添加到msmutablearray用户。下面是一些代码。问题在哪里?请帮忙:Objective c 解析工作正常,但数据未存储在nsMutableArray中,objective-c,nsmutablearray,nsxmlparser,Objective C,Nsmutablearray,Nsxmlparser,我正在解析一个xml文件,它可以工作,并向我显示在控制台中解析的数据(例如:Speller的处理值…),但它们不会添加到msmutablearray用户。下面是一些代码。问题在哪里?请帮忙: - (MyData *) initXMLParser { [super init]; // init array of user objects users = [[NSMutableArray alloc] init]; return self; } - (void)
- (MyData *) initXMLParser {
[super init];
// init array of user objects
users = [[NSMutableArray alloc] init];
return self;
}
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"user"]) {
NSLog(@"user element found – create a new instance of User class...");
user = [[User alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!currentElementValue) {
// init the ad hoc string with the value
currentElementValue = [[NSMutableString alloc] initWithString:string];
} else {
// append value to the ad hoc string
[currentElementValue appendString:string];
}
NSLog(@"Processing value for : %@", string);
}
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"users"]) {
// We reached the end of the XML document
return;
}
if ([elementName isEqualToString:@"user"]) {
if ([elementName isEqualToString:@"userName"]) {
[[self user] setUserName:currentElementValue];
}
if ([elementName isEqualToString:@"firstName"]) {
[[self user] setFirstName:currentElementValue];
}
if ([elementName isEqualToString:@"lastName"]) {
[[self user] setLastName:currentElementValue];
}
[users addObject:user];
/*comboarray = [[users arrayForKey:@"ComboBoxValues"]
sortedArrayUsingSelector:@selector(compare:)];*/
// release user object
[user release];
user = nil;
} else {
[user setValue:currentElementValue forKey:elementName];
}
[currentElementValue release];
currentElementValue = nil;
}
-(BOOL)parseDocumentWithData:(NSData *)data {
//NSString * filePath = [[NSBundle mainBundle] pathForResource:@"Users" ofType:@"xml"];
//data = [NSData dataWithContentsOfFile:filePath];
if (data == nil)
return NO;
// this is the parsing machine
NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:data];
// this class will handle the events
[xmlparser setDelegate:self];
[xmlparser setShouldResolveExternalEntities:NO];
// now parse the document
BOOL ok = [xmlparser parse];
if (ok == NO)
NSLog(@"error");
else
NSLog(@"OK");
[xmlparser release];
return ok;
}
- (void) dealloc {
[currentElementValue release];
[super dealloc];
}
这似乎是代码中有问题的部分
- (MyData *) initXMLParser {
[super init]; // change to self = [super init];
// init array of user objects
users = [[NSMutableArray alloc] init];
return self;
}
您没有使用[super init]的值初始化self
代码>
并添加[用户发布]代码>行到您的dealloc
调用,除非您在其他地方释放它使用以下命令更改您的didEndElement方法:
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"users"]) {
// We reached the end of the XML document
return;
}
if ([elementName isEqualToString:@"userName"]) {
[[self user] setUserName:currentElementValue];
[currentElementValue release];
currentElementValue = nil;
}
if ([elementName isEqualToString:@"firstName"]) {
[[self user] setFirstName:currentElementValue];
[currentElementValue release];
currentElementValue = nil;
}
if ([elementName isEqualToString:@"lastName"]) {
[[self user] setLastName:currentElementValue];
[currentElementValue release];
currentElementValue = nil;
}
if ([elementName isEqualToString:@"user"]) {
[users addObject:user];
/*comboarray = [[users arrayForKey:@"ComboBoxValues"]
sortedArrayUsingSelector:@selector(compare:)];*/
// release user object
[user release];
user = nil;
}
}
我这样做了,但它仍然没有存储数据:(在解析器的整个调用过程中记录您的用户数组,看看它是否在某个地方发布,您肯定在内存管理方面出了问题是的,这是内存管理的问题,我修复了它,我调用了n-initxml。感谢它的工作:)