【发布时间】:2011-08-09 21:27:04
【问题描述】:
我以为我对 Objective-C 中的对象和可变性有很好的理解,但我注意到 NSArray 的一些奇怪之处。
如果我有以下不起作用:
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:Object]
谢谢!
编辑 1
我只是想将NSArray 存储回NSUserDefaults:
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:someKey];
它从来没有正确存储它,所以当我调试时,我发现在创建数组时从未添加过“myObject”。
注意:我只测试了 [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] 返回一个空/nil 数组
编辑 2
我已经将这个问题隔离了一点; 只有在[NSUserDefaults standardUserDefaults] arrayForKey:someKey] 返回“nil”时才会发生这种情况(基本上,NSUserDefaults 中不存在该数组)。
我仍然很想知道为什么这对于我拥有的第二个代码解决方案来说不是问题。
【问题讨论】:
-
这两个表达式是相同的。定义“不起作用”;即粘贴您如何测试它的示例。
-
我添加了更多关于分配后如何使用 NSArray 的详细信息。
-
这两个表达式是相同的;如果 NSUserDefaults 返回
nil,那么myArray将永远是nil。如果不是这种情况,那是因为 NSUserDefaults 在您认为它是nil时返回了一个非零值,或者您没有向我们展示所有代码。 -
对我来说,如果之前已设置数组,您的第一个解决方案效果很好。
标签: objective-c nsarray