Ios '的隐式转换;int';至';NSArray*';不允许使用ARC

Ios '的隐式转换;int';至';NSArray*';不允许使用ARC,ios,nsarray,nsnumber,Ios,Nsarray,Nsnumber,我试图用整数填充数组。然而,对我来说有些奇怪的是,这并不像我想的那么容易。下面是对所发生情况的描述 代码的最后一行给了我一个错误。“不允许将int隐式转换为NSArray” 您应该通过以下方式创建阵列: 在.h文件中: { NSMutableArray *storeDisk; } property int virdCount; property (nonatomic, strong)NSMutableArray *storeDisk; NSMutableArray *storeDisk

我试图用整数填充数组。然而,对我来说有些奇怪的是,这并不像我想的那么容易。下面是对所发生情况的描述

代码的最后一行给了我一个错误。“不允许将int隐式转换为NSArray”


您应该通过以下方式创建阵列:

在.h文件中:

{
    NSMutableArray *storeDisk;
}
property int virdCount;
property (nonatomic, strong)NSMutableArray *storeDisk;

NSMutableArray *storeDisk = [[NSMutableArray alloc] init];
[storeDisk addObject:virdLabel.text];

如果要将整数放入
NSArray
,则需要使用
NSNumber

例如:

NSArray *a = [NSArray arrayWithObject:[NSNumber numberWithInt:virdCount]];
或者,这里有一个简写:

NSArray *a = @[@(virdCount)];
无论采用哪种方式,要想恢复数据,请执行以下操作:

int value = [[a objectAtIndex:0] intValue];

看来你在理解NSArrays上犯了一个根本性的错误。我建议您阅读一些iOS教程,了解核心cocoa类的语法和用法

以下一行:

NSArray storeDisk[10];
不会生成包含10个单元格的NSArray

这也不起作用,正如未经编辑的问题:

NSArray* storeDisk[15];
这将简单地生成一个由15个NSArray指针组成的数组。只有当您尝试创建一个包含15个nsarray的数组时,这才是有用的(尽管如此,在Objective-C中还是有更好的方法可以做到这一点)

您必须阅读有关NSArray的内容,并使用正确的语法来使用它。 除此之外,NSArray不是正确的选择,因为它是不可变的。如果要向数组中添加对象,必须使用可变数组。其次,要插入一个整数,必须使用数字的cocoa包装器-NSNumber。NSArray只能容纳对象

为了生成包含20个单元的NSArray,一种可能性是使用以下代码:

NSMutableArray* array = [NSMutableArray arrayWithCapacity:20];
[array insertObject:[NSNumber numberWithInt:virdCount] atIndex:10];
不过,我强烈建议你停下来读一读或读一读


已编辑以反映已编辑的问题。

不能按原样将int添加到数组中。数组只能接受对象,所以它是使用(id)或任何Othert objective c对象创建的。 如果要将int添加到NSArray,请使用

[arrayObj addObject:[NSNumber numberWithInteger:0]];
[arrayObj addObject:[NSNumber numberWithInteger:1]];

你还没有创建一个NSArray。您已经创建了一个NSArray指针数组。存储@“101”并不是存储整数,而是存储字符串。@s1m0n将返回一个不可变的数组请参见更新的问题,不应使用相同的名称命名实例变量和局部变量。编译器将抛出一个警告,您将感到困惑。更新只会让您更深一层。或[arrayObj addObject:@(0)];
[arrayObj addObject:[NSNumber numberWithInteger:0]];
[arrayObj addObject:[NSNumber numberWithInteger:1]];