NSMutableArray总是转换为NSArray

时间:2013-07-18 14:25:17

标签: ios nsmutablearray nsarray

我有一个NSMutableArray,其初始化如下:

@interface Countries ()
{
    NSMutableArray *arrayofCountry;
}
@end


- (void)viewDidLoad
{
       //...
       arrayofCountry=[[NSMutableArray alloc]init];
       //...
}

然后我想将removeObjectAtIndex应用于NSMutableArray:

[arrayofCountry removeObjectAtIndex:sourceRow];

问题是该日志崩溃了:

-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance

我用以下方式验证了它:

NSLog( NSStringFromClass( [arrayofCountry class] ));

并且它正在返回__NSArrayI。 问题是它是如何转换为NSArray的? 我只是填充它:

arrayofCountry=[JSON valueForKeyPath:@"country_name"];

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

试试这个。这将根据您的其他数组的内容创建一个新的NSMutableArray

arrayofCountry = [NSMutableArray arrayWithArray:[JSON valueForKeyPath:@"country_name"]];

答案 1 :(得分:2)

如果存储在密钥为country_name的JSON文件中的值为NSArray,则无法在不更改NSMutableArray的情况下将其复制到arrayofCountry = [[JSON valueForKeyPath:@"country_name"] mutableCopy]; 。试着这样做:

NSMutableArray

此外,在创建arrayOfCountry = [NSMutableArray array]; 时,请按照此方式创建(而不是使用 alloc 然后 init ):

{{1}}

答案 2 :(得分:1)

尝试这样,

arrayofCountry=(NSMutableArray *)[JSON valueForKeyPath:@"country_name"];

as @ Ahmed Mohammed:建议尝试这样的方式

arrayofCountry=[[JSON valueForKeyPath:@"country_name"] mutableCopy];