Objective c 解析工作正常,但数据未存储在nsMutableArray中

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)

我正在解析一个xml文件,它可以工作,并向我显示在控制台中解析的数据(例如:Speller的处理值…),但它们不会添加到msmutablearray用户。下面是一些代码。问题在哪里?请帮忙:

- (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。感谢它的工作:)