2

我在我的 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 *'

我该如何绕过该警告?如果没有该警告,我找不到将所有数组值分配给电话数组的正确方法。

提前非常感谢!

4

2 回答 2

11

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

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

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

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

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

它添加了一个基本上对编译器意味着的演员:'相信我,这很好'......

于 2014-02-12T15:27:53.873 回答
0

看起来它可能在你的最后一行抱怨,因为你传入了一个NSMutableArraywhenNSArrayarrayWithArray方法调用一个NSArray. 您可以通过调用数组来解决这个copy问题phones,如下所示:

phone = [NSArray arrayWithArray:[phones copy]];
于 2014-02-12T15:19:55.007 回答