NSArray 可变性和 arrayByAddingObject [英] NSArray mutability and arrayByAddingObject

查看:38
本文介绍了NSArray 可变性和 arrayByAddingObject的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我以为我对 Objective-C 中的对象和可变性有很好的理解,但我注意到 NSArray 有一些奇怪的东西.

I thought I had a good understanding of Objects and mutability in Objective-C but I've noticed something curious with NSArray.

如果我有以下不起作用:

If I have the following that doesn't work:

NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ];

myObject"永远不会添加到myArray".

但是,以下有效:

NSArray *someArray = [[NSUserDefaults standardUserDefaults] arrayForKey:someKey];
NSArray *myArray = [someArray arrayByAddingObject:myObject];

这是什么解释?我知道 NSArray 不是可变的,但因为它是在初始分配期间,所以它应该可以工作,因为任何一种方式似乎都是等效的.

What's the explanation for this? I know that NSArray is not mutable but since it is during the initial assignment, it should work since either way seems equivalent.

[[NSUserDefaults standardUserDefaults] arrayForKey:someKey] 返回一个 NSArray

someArray 是一个 NSArray

someArray is an NSArray

因此,NSArray 简单地从 [NSArray arrayByAddingObject:Object]

谢谢!

编辑 1

我只是想将 NSArray 存储回 NSUserDefaults:

I am simply wanting to store the NSArray back to NSUserDefaults:

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:someKey];

它从未正确存储它,因此当我调试时,我看到创建数组时从未添加myObject".

It was never storing it properly, and so when I debugged I saw that "myObject" was never being added when the array was created.

注意:我只测试了 [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] 返回一个空/nil 数组

Note: I have only been testing with [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] returning a empty/nil array

编辑 2

我已经隔离了这个问题;这仅在 [NSUserDefaults standardUserDefaults] arrayForKey:someKey] 返回nil" 时才会发生(基本上,NSUserDefaults 中不存在该数组).我仍然很想知道为什么我拥有的第二个代码解决方案不是问题.

I've isolated the issue a bit; this only happens if [NSUserDefaults standardUserDefaults] arrayForKey:someKey] returns "nil" (basically, the array doesn't exist in NSUserDefaults). I'm still curious to know though why it's not an issue for the 2nd code solution I have.

推荐答案

这应该是预期的行为

如果你在 Objective-C 中调用 nil 上的方法,你总是得到 nil(或 NO/0)作为你的返回值

If you call a method on nil in Objective-C, you always get nil (or NO/0) as your return value

在这种情况下,当调用 NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ]; 时,如果 someKey 未设置NSUserDefaults,那么你正在调用 [nil arrayByAddingObject:] 并且希望得到 nil 返回

In this case, when calling NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ];, if someKey isn't set in NSUserDefaults, then you're calling [nil arrayByAddingObject:] and so would expect to get nil back

这篇关于NSArray 可变性和 arrayByAddingObject的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆