2011-04-20 57 views
3

我以爲我對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中不存在)時纔會發生。 我仍然很想知道爲什麼它不是第二代碼解決方案的問題。

+0

兩個表達式是相同的。定義「不起作用」;即粘貼您如何測試它的示例。 – bbum 2011-04-20 23:47:24

+0

我已經添加了更多關於如何在賦值後使用NSArray的詳細信息。 – aSadhankar 2011-04-21 20:21:36

+0

這兩個表達式是相同的;如果NSUserDefaults返回'nil',那麼'myArray'將始終爲'nil'。如果情況並非如此,那麼可能是因爲NSUserDefaults在您認爲它爲'nil'時返回非零值,或者您沒有向我們顯示所有代碼。 – bbum 2011-04-24 20:58:06

回答

0

您如何查看是否添加了myObject?這兩個代碼示例看起來都很好,而且我確實使用了前者而沒有任何問題。但是你所有的假設都是正確的。這個問題,如果確實存在的話,在別處。

0

這應該是預期的行爲

如果您在Objective-C調用一個方法上nil,你總是零(或NO/O)爲您的返回值

在這種情況下,當調用NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ];,如果someKeyNSUserDefaults設置,那麼你打電話[nil arrayByAddingObject:],因此期望得到nil