2014-02-12 29 views
2

我在我的iOS應用中使用JSONModel,我正面臨一些警告,讓我自己解釋一下。JSONModel:填充泛型類型的NSArray

比方說,我有這個JSONModel

CTVContact.h

@interface CTVContact : JSONModel 
@property (nonatomic, strong) NSArray<Optional, CTVPhone> *phone; 
@end 

CTVContact.m

NSMutableArray *phones = [[NSMutableArray alloc] init]; 
for(NSString *p in personPhones) { 
    CTVPhone *phn = [[CTVPhone alloc] init]; 
    phn.original = p; 
    [phones addObject:phn]; 
}  
phone = [NSArray arrayWithArray:phones]; 

基本上所有的工作就像一個魅力,但我得到一個警告陳述如下:

Incompatible pointer types assigning to 'NSArray<Optional,CTVEventParticipant> *' from 'NSArray *' 

我該如何解決該警告?我無法找到正確的方式將所有陣列值分配給手機陣列,但沒有發出警告。

非常感謝!

回答

11

NSArray<Optional, CTVPhone> *phone;定義一個變量,它需要一個符合2個協議的陣列。如果您嘗試將一個變量(phone)設置爲未聲明符合這些協議的數組,那麼您將收到編譯警告。

phone = [NSArray arrayWithArray:phones];只是創建一個'普通'數組,沒有實現特殊的協議。所以你會收到警告。

可能正確的做法是從@property定義中刪除協議。除非你有一個NSArray子類,符合這些協議,你實際上應該用...

另外,假設你不試圖調用可能在這些協議中定義的任何方法:

phone = (NSArray <Optional, CTVPhone> *)[NSArray arrayWithArray:phones]; 

它增加了一個基本上意味着編譯器的演員:'相信我,沒事'...

+0

如果我刪除協議,JSONModel將停止工作,並且它不會正確建模JSON,請參閱模型集合部分:https://github.com/icanzilb/JSONModel/blob/master/README.md#magical- data-modeling-framework-for-json – asheinfeld

+0

夠公平的,添加了你的解決方法。 – Wain

+0

工程就像一個魅力!謝謝! – asheinfeld

0

看起來它可能是在抱怨你的最後一行,因爲當NSArrayarrayWithArray方法調用NSArray時,你傳遞的是NSMutableArray。可以通過調用copyphones陣列上,因爲這樣的逃脫此:

phone = [NSArray arrayWithArray:[phones copy]]; 
+0

感謝您的答覆,但沒有,沒有解決它,主要問題是,在界面我說陣列是一個NSArray ,我嘗試複製一個NSarray,所以它說NSArray != N SArray – asheinfeld

+0

@asheinfeld,那你爲什麼要加上''呢? – Wain

+0

這樣JSONModel的作品:)。這就是他們要求你這樣做的方式。 – asheinfeld