objective-c - NSArray 可变性和 arrayByAddingObject

标签 objective-c nsarray

我认为我对 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 中不存在该数组)。 我仍然很想知道为什么这不是我拥有的第二个代码解决方案的问题。

最佳答案

您如何检查是否添加了 myObject?两个代码示例看起来都不错,而且我肯定毫无问题地使用了前者。但你所有的假设都是正确的。这个问题,如果确实存在的话,则在别处。

关于objective-c - NSArray 可变性和 arrayByAddingObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737415/

相关文章:

objective-c - C char * 转换为 Objective-C NSString (或 NSData?)

ios - 发布到 "me/myapp:myaction"会导致我的开放图故事仅显示在我的 'recent activity' 部分

ios - 快速设置 NSArray 协议(protocol)

ios - CFMutableArray 超出其容量

objective-c - 嵌套 NSArray 中对象的完整二分图

objective-c - 从 NSBezierPath 中切出一个矩形

objective-c - 带提示的导航栏-替换为图片

ios - 如何在 IOS 中从 UITableView 中搜索多个 NSArray

objective-c - 从包含 plist 中字符串的 NSArray/NSDictionary 填充 UITableView

Iphone 蓝牙连接到非 IOS 设备