2012-09-26 54 views
0

從Java來了,我寫:如何投射到一個NSObject的數組?

NSObject* obj[] = (NSObject* []) [self getResult]; 

,編譯器抱怨Cast to incomplete type 'NSObject *[]'

什麼是對象轉換對象的數組的正確方法?

謝謝。

+0

它是一個NSArray還是一個普通的C數組? – 2012-09-26 19:40:25

回答

1

假設getResult返回一個對象,你想要什麼是對象的數組,Xcode的4.4的,你可能會使用:

NSArray *objects = @[ [self getResult] ]; 

這將創建一個(不變)陣列只包含一個對象 - 無論getResult的結果如何。

在Objective-C數組中可能包含任何對象;您不會創建數組來保存特定類型的對象。

+0

謝謝,不可變數組正是我所需要的。 – Eir

+0

更好地保留那隻小狗@ [array is autorelease –

+0

@stackmonster在我的例子中,這只是一個局部變量,但是作爲Eir來自Java的他可能使用ARC而不是花時間學習手動內存管理? – Tommy

3

考慮到您對語言和庫的新認識:您通常會使用集合類型,例如NSArray。同樣,-getResult將返回NSArray


還要注意的是,在ObjC,類型轉換字面上傳遞NSObject型指針作爲另一種類型 - 不存在隱含的推廣(如你在Java中看到)。如果您想將NSObject降頻爲NSArray,則可以使用NSArray * array = (NSArray*)[self getResult];。同樣,沒有促銷 - 如果結果是NSString,那麼您在運行時仍然在處理NSString

Tommy的答案(+1)演示瞭如何創建包含一個元素的NSArray - 另一種編寫該方法的方法不依賴於最新的編譯器功能NSArray * array = [NSArray arrayWithObject:[self getResult]];

+0

感謝您的精心解答!我接受了Tommy的解決方案,因爲它也向我解釋瞭如何簡單地初始化我的陣列。 – Eir

0

你應該看看使用內置的數組類。無論是NSArrayNSMutableArray