NSString alloc/init generates 'Redefinition of

2019-09-15 04:49发布

问题:

I seem to be generating a lot of questions with this one little iPhone app....

I am attempting to stuff an NSMutableArray with NSStrings, and I am working like this:

...
NSString *myStr = [[NSString alloc] initWithString:@"Jupiter II"]; 
[txtArray addObject: myStr];
[myStr release];

NSString *myStr = [[NSString alloc] initWithString:@"Could this be OUR Waffles?"];
// in this second block, the line above generates the error: 'Redefinition of myStr'. Why?
[txtArray addObject: myStr];
[myStr release];
...

The first block generates no errors, but the subsequent blocks (identical save for the content of each string object) all generate the error, 'Redefinition of myStr'. Why?

I know that this is going to be a facepalm, but I just gotta know, and get beyond this!

hanks for any and all assistance!

Kind regards,

Steve O'Sullivan

回答1:

Just remove NSString* from the second block:

NSString *myStr = [[NSString alloc] initWithString:@"Jupiter II"]; 
[txtArray addObject: myStr];
[myStr release];

myStr = [[NSString alloc] ...

Each time you write something like NSString *myStr you declare new variable - and variable names must be different in the same scope. But you can reuse the same variable to store different objects - as you do in the code above



回答2:

Maybe it was just for the sake of example, but your first three lines of code can be substituted with:

[txtArray addObject:@"Jupiter II"]

Also, creating an array of strings is as simple as:

[NSArray arrayWithObjects:@"Jupiter II",
                          @"Could this be OUR Waffles",
                          nil];