NSMutableArray从文件读入后更改字符串

时间:2010-02-06 23:21:24

标签: iphone objective-c xcode

我有一个我在程序加载时创建的NSMutableArray。如果程序终止,我将数组保存到文件中。然后,当应用程序再次启动时,我会检查此文件是否存在,如果存在,请将其作为数组读取。

问题是,在第一次创建时一切都很好,我检查一个数组对象对某个字符串,如果它是相等的,做一些事情。这在第一次工作正常。但是如果我从罚款中读回数组,并做同样的比较,即使他们都说它们是相同的,它也不会这么认为并且会跳过这个过程。代码示例:

如果文件不存在,则从头开始创建:

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",
                          @"HALF",
                          @"BUST",
                          nil];

如果文件存在:

pnames = [[NSMutableArray alloc] initWithContentsOfFile:myPath];

以下是比较的来源:

  NSString *strInfo;

strInfo = [pnames objectAtIndex: theInteger - 1];
NSLog(@"strInfo:  %@", strInfo);
if (strInfo == @"DOUBLE")
{
  //do something
}

就像我说的那样,这个比较在第一次创建时工作正常,但是当通过文件加载数组时没有。

将文件写出来是通过:

完成的
(void)applicationWillTerminate:(UIApplication *)application {
[pnames writeToFile:[self saveFilePath] atomically:YES];

}

当我在strInfo(从上面)查看调试器时,它显示为:

NSCFString - 0c8168 - DOUBLE ---从创建开始,并将其识别为相等

NSCFString - 0x3d42af0 - DOUBLE ---当它无法识别它时,通过文件加载

非常感谢对此的任何见解。

...地理位置

2 个答案:

答案 0 :(得分:5)

if (strInfo == @"DOUBLE")
{
  //do something
}

您无法使用==比较NSString实例,您需要使用-isEqualToString:

if ([strInfo isEqualToString: @"DOUBLE"]) { ... }

它恰好在第一次创建时工作,因为所有的字符串值都作为常量字符串编译到你的应用程序中,因此,你的数组中的@“DOUBLE”恰好与@的地址相同“双倍”的比较。

从“disk”读取数组时,会分配新的字符串。

答案 1 :(得分:0)

我想知道你是否刚刚将这个NSString保存到NSUserDefaults,你会有更轻松的时间。请记住,当您将Mutable字符串保存到NSUserDefaults时,当您检索它时,它不可变。

我不确定您的确切问题,但这可能会让事情变得更容易。