Geo*_*rge 1 iphone xcode objective-c
我有一个我在程序加载时创建的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];
Run Code Online (Sandbox Code Playgroud)
如果文件存在:
pnames = [[NSMutableArray alloc] initWithContentsOfFile:myPath];
Run Code Online (Sandbox Code Playgroud)
这是比较的地方:
NSString *strInfo;
strInfo = [pnames objectAtIndex: theInteger - 1];
NSLog(@"strInfo: %@", strInfo);
if (strInfo == @"DOUBLE")
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
就像我说的,这个比较在第一次创建时工作正常,但不是在通过文件加载数组时.
写出文件是通过以下方式完成的:
(void)applicationWillTerminate:(UIApplication *)application {
[pnames writeToFile:[self saveFilePath] atomically:YES];
}
Run Code Online (Sandbox Code Playgroud)
当我在strInfo(从上面)查看调试器时,它显示为:
NSCFString - 0c8168 - DOUBLE ---从创建开始,并确实认为它是相同的
NSCFString - 0x3d42af0 - DOUBLE ---当它无法识别它时,通过文件加载
我们非常感谢您对此的任何见解.
地理...
if (strInfo == @"DOUBLE")
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
您无法使用==来比较NSString实例-isEqualToString:.
if ([strInfo isEqualToString: @"DOUBLE"]) { ... }
Run Code Online (Sandbox Code Playgroud)
它恰好在第一次创建时工作,因为所有字符串值都作为常量字符串编译到您的应用程序中,因此,数组中的@"DOUBLE"正好与@"DOUBLE"处于同一地址比较.
从"磁盘"读取数组时,将分配新字符串.
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |