我以爲我對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