JSONModel:填充泛型类型的NSArray

时间:2014-02-12 15:17:28

标签: ios objective-c jsonmodel objc-protocol

我在我的iOS应用程序中使用JSONModel并且我正面临一些警告,让我自己解释一下。

假设我有这个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 *'

我该怎样绕过那个警告?在没有该警告的情况下,我找不到将所有数组值分配给手机阵列的正确方法。

提前多多感谢!

2 个答案:

答案 0 :(得分:11)

NSArray<Optional, CTVPhone> *phone;定义一个变量,该变量采用符合2个协议的数组。如果您尝试将变量(phone)设置为不表明它符合这些协议的数组,那么您将收到编译警告。

phone = [NSArray arrayWithArray:phones];只是创建一个'普通'数组,没有实现特殊协议。所以你得到一个警告。

可能正确的做法是从@property定义中删除协议。除非你有一个NSArray子类符合你应该实际使用的那些协议......

或者,假设您没有尝试调用可能在这些协议中定义的任何方法:

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

添加了一个基本上对编译器来说意味着的演员:'相信我,没关系'......

答案 1 :(得分:0)

看起来它可能会在您的最后一行抱怨,因为您在NSMutableArray的{​​{3}}方法调用NSArray时传递了NSArray。您可以通过调用copy数组上的phones来解决此问题:

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