我以为我对Objective-C中的对象和可变性有很好的理解,但是我注意到了NSArray的一些好奇。NSArray可变性和arrayByAddingObject
如果我有不工作的情况如下:
NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ];
“myObject的” 永远不会加入到 “myArray的”。
但是,下面的工作:
NSArray *someArray = [[NSUserDefaults standardUserDefaults] arrayForKey:someKey];
NSArray *myArray = [someArray arrayByAddingObject:myObject];
什么是该如何解释呢?我知道NSArray是不可变的,但由于它在初始分配期间,它应该工作,因为任何一种方式似乎都是相同的。
[NSUserDefaults的standardUserDefaults] arrayForKey:someKey]返回一个NSArray
是的someArray一个NSArray
所以,一个NSArray是从简单的衍生[NSArray的arrayByAddingObject:对象]
谢谢!
编辑1
我只是想存储的NSArray回NSUserDefaults的:
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:someKey];
这是从来没有存放得当,所以当我调试我看到“myObject的”从来没有被在数组创建时添加。
注:我只被测试与[[NSUserDefaults的standardUserDefaults] arrayForKey:someKey]返回空/无阵列
编辑2
我已经分离出的问题有点; 只有在[NSUserDefaults standardUserDefaults] arrayForKey:someKey]返回“nil”(基本上,该数组在NSUserDefaults中不存在)时才会发生。 我仍然很想知道为什么它不是第二代码解决方案的问题。
两个表达式是相同的。定义“不起作用”;即粘贴您如何测试它的示例。 – bbum 2011-04-20 23:47:24
我已经添加了更多关于如何在赋值后使用NSArray的详细信息。 – aSadhankar 2011-04-21 20:21:36
这两个表达式是相同的;如果NSUserDefaults返回'nil',那么'myArray'将始终为'nil'。如果情况并非如此,那么可能是因为NSUserDefaults在您认为它为'nil'时返回非零值,或者您没有向我们显示所有代码。 – bbum 2011-04-24 20:58:06