【问题标题】:Stick NSString[] into NSArray将 NSString[] 粘贴到 NSArray 中
【发布时间】:2013-10-07 21:32:34
【问题描述】:

为什么我不能将 NSString[] 粘贴到 NSArray 中?我收到以下错误“ARC 不允许将间接指针隐式转换为指向 'id' 的 Objective-C 指针”

代码如下:

NSString *s1, *s2;
NSString *cArray[]={s1, s2};
NSMutableArray *dataArray = [[NSMutableArray alloc] init];
[dataArray addObject:cArray];

【问题讨论】:

  • 你只能将 NSObject 的实例添加到 NSMutableArray。 NSString[] 是 NSObjects 的 C 数组。
  • 顺便说一句,如果您需要初始化对象的 NSArray,请使用它,NSArray * array = @[ s1, s2 ];
  • 你也可以用 C 数组中的项目创建一个 NSArray,如下所示:NSArray *dataArray = [NSArray arrayWithObjects:cArray count:numObjects]; 这不会将 cArray 插入到 dataArray 中,它会插入 objects i> 在cArray 中进入dataArray
  • @NicholasHart - 但他没有创建 NSArray。

标签: ios objective-c arrays nsstring nsarray


【解决方案1】:

你不能这样做,因为cArray的所有权不能转让。

如果它是一个局部变量,它会在其作用域结束后立即消失,从而为您的可变数组留下一个悬空引用。

即使是全局的,也会有问题,因为你的NSMutableArray不知道如何正确释放C数组。

Objective C 希望尽可能保护您免受此类情况的影响,提供诸如NSArray 之类的好类以使您的工作更轻松:

NSMutableArray *dataArray = [NSMutableArray array];
NSString *s1 = @"hello", *s2 = @"world";
// You can choose another constructor as you see fit.
NSArray *cArray = @[s1, s2];
[dataArray addObject:cArray];

【讨论】:

  • Chuck 的回答允许使用任意(和可变)大小的数组,根据需要创建 NSArray 或 NSMutableArray。
  • @HotLicks 这也是我关于“选择另一个认为合适的构造函数”的评论的意思。
【解决方案2】:

NSArray 保存对象。 C 数组不是对象,因此不能将其放入 NSArray。如果要从 C 数组中创建 NSArray,可以使用 arrayWithObjects:count: 构造函数。

【讨论】:

  • 这是要走的路,如果你从一个 C 数组开始。根据方法调用中指定的类,可以创建 NSArray 或 NSMutableArray。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多