On Mar 24, 2011, at 12:06 PM, Siegfried wrote:

> So, after discussing some methods to import and export a CoreData database, I 
> ended up sticking with my initial XML idea.
> 
> Now I'm stuck in a problem when parsing that is probably simple, but I can't 
> solve. Basically, my XML is like this:
> 
> <elem1>
>    <child1>Value</child1>
>    <child2>Value</child2>
>    <child3>Value</child3>
> </elem1>
> <elem2>
>    <child1>Value</child1>
>    <child2>Value</child2>
>    <child3>Value</child3>
> </elem2>

[snip]

> When parsing with NSXMLParser, everything runs properly (well, almost) except 
> for the fact that every property (child elements here) from every entity 
> (elem here) gets the value from the last imported property, child3 in this 
> case.
> -(void)parser: ... didEndElement {
> 
>    // Database - Save the Import
>    if ([elementName isEqualToString:@"database"]) {
> 
>        NSError *error;
>        if (![self.managedObjectContext save:&error]) {
>            NSLog(@"There was an error while saving "
>                   "the imported database: %@", error);
>        }
>    }
> 
>    // Attribute
>    if ([elementName isEqualToString:kAttrName]) {
>        [currentEntity setValue:currentXMLValue forKey:kAttrName];
>        return;
>    }

You need to copy currentXMLValue, because in your code, every item that refers 
to it ends up referring to the same mutable string, which will change every 
time the parser:foundCharacters: method is called.

        NSString *newValue = [currentXMLValue copy];
        [currentEntity setValue:newValue forKey:kAttrName];
        [newValue release];

Assigning strings like you did works with immutable ones, but not with mutable 
ones.

Hank

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to