NSMutableArray Strings changing after reading in from file
I have a NSMutableArray that I create on program load. If the program terminates, I save the array to a file. Then when the app starts again, I check to see if this file exists and if so, read it in as the array.
Problem is, on first creation everything is fine, I check an array object against a certain string and if it is equal, do something. This works fine on first go. But if I read the array back in from the fine, and do the same compare, even though they both say they are the same, it does not think so and skips the process. Code example:
This is if the file does not exist, create from scratch:
NSMutableArray *tmpArray=[[NSMutableArray alloc] initWithObjects:
@"1000",
@"1000",
@"1000",
@"500",
@"500",
@"500",
@"250",
@"250",
@"250",
@"100",
@"100",
@"100",
@"100",
@"TRIPLE",
@"TRIPLE",
@"DOUBLE",
@"DOUBLE",
@"- 500",
@"- 250",
@" - 250",
@"- 100",
@"- 100",
@"HAL开发者_如何学PythonF",
@"BUST",
nil];
if file does exist:
pnames = [[NSMutableArray alloc] initWithContentsOfFile:myPath];
Here is where the compare comes in:
NSString *strInfo;
strInfo = [pnames objectAtIndex: theInteger - 1];
NSLog(@"strInfo: %@", strInfo);
if (strInfo == @"DOUBLE")
{
//do something
}
Like I said, this compare works fine on the first creation, but not when the array is loaded via the file.
Writing the file out is done via:
(void)applicationWillTerminate:(UIApplication *)application {
[pnames writeToFile:[self saveFilePath] atomically:YES];
}
When I look in the debugger at the strInfo (from above), it shows as:
NSCFString - 0c8168 - DOUBLE ---From creation, and does recognize it as equal
NSCFString - 0x3d42af0 - DOUBLE ---When it does not recognize it as equal, via file load
Any insight on this is greatly appreciated.
Geo...
if (strInfo == @"DOUBLE")
{
//do something
}
You can't compare NSString instances using ==, you need to use -isEqualToString:
.
if ([strInfo isEqualToString: @"DOUBLE"]) { ... }
It happens to work on first creation because all of the string values are compiled into your app as constant strings and, thus, the @"DOUBLE" that is in your array just so happens to be at the same address as the @"DOUBLE" of the comparison.
When the array is read from "disk", new strings are allocated.
I wonder if you just saved this NSString to the NSUserDefaults you'd have a much easier time. Keep in mind, when you save a Mutable string to NSUserDefaults, when you retrieve it, its not mutable.
I'm not sure of your exact problem, but this might make things easier.
精彩评论