我在我的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 *'
我该怎样绕过那个警告?在没有该警告的情况下,我找不到将所有数组值分配给手机阵列的正确方法。
提前多多感谢!
答案 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]];