2013-08-21 50 views
1

我得到这样的警告:如何解决有关不兼容指针类型的警告?

Incompatible pointer types initializing 'NSMutableArray *__strong' with an expression of type 'NSArray * 

这是代码给予警告线:

NSMutableArray *apptDataArray = [AppointmentInfo MR_findAllWithPredicate:nsp]; 

其中MR_findAllWithPredicate返回NSArray的。我一直在阅读SO和Google的所有帖子,但没有发现任何这样的内容。我认为这很简单,但我需要帮助。

+2

一个NSArray的地址不分配给输入真实的NSMutableArray的指针。就这么简单。 (但是,由于NSMutableArray是NSArray的子​​类,因此您可以将NSMutableArray地址分配给NSArray指针)。 –

回答

4

NSArray不是NSMutableArray,因此这些指针是不兼容的,调用它的mutating方法会崩溃。您可以通过其他方式作为NSMutableArrayNSArray子类。

您可以从返回值的NSMutableArray+[NSMutableArray arrayWithArray:]

NSMutableArray *apptDataArray = [NSMutableArray arrayWithArray:[AppointmentInfo MR_findAllWithPredicate:nsp]]; 

如果你的方法永远返回nil,创建一个NSArray *变量和创建可变数组之前检查nil

3

除了BergQuester的回答,继承人较短的方式来获得一个数组可变数组:

NSMutableArray *apptDataArray = [[AppointmentInfo MR_findAllWithPredicate:nsp] mutableCopy]; 
+2

只要使用copy并且不使用ARC,请确保释放可变数组。 – BergQuester

相关问题