0

好的。我一直在尝试组织这个 nsmutable 数组,以便我的程序可以按照我想要的方式使用它。

我从一个标准的 NSMutable 数组开始,然后使用 addobject: 方法填充它,然后还用更多的 NSMutableArrays 填充它(所以数组中的数组)。因此,我需要大量调用 ObjectAtIndex: 方法以及 replaceObjectAtIndex: withObject: 方法。另外因为您只能将类型 ID 的对象广告到 NSMutableArrays(我认为至少),我不得不将所有双精度变量转换为 NSNumbers,然后再将其转换为双精度数,然后再转换为 NSNumbers 以再次存储...效率不高。

但主要问题是(以前的事情只是我很好奇的东西),这段代码:

NSMutableArray * array = [tmp objectAtIndex x];
[tmp replaceObjectAtIndex:x withObject: [array replaceObjectAtIndex:2 withObject: result]];

Xcode 说问题出在第二行,我只是在上下文中添加了第一行。Result 是一个 NSNumber,tmp 也是一个 NSMutableArray。Xcode 说错误是“将'Void'发送到不兼容类型'id'的参数”。

我真的很感激任何帮助:)。谢谢!

4

2 回答 2

3

让我们打破界限[tmp replaceObjectAtIndex:x withObject: [array replaceObjectAtIndex:2 withObject: result]];

当你看到这样的问题并且你有一堆嵌套的方法时,从最深的方法调用开始并移出,检查文档以查看每个方法返回的内容。在这种情况下,答案很简单,但它始终是一个好习惯:

-[NSMutableArrray replaceObjectAtIndex:withObject:]返回void,因此:

[tmp replaceObjectAtIndex:x withObject: void],因此作为Xcode 理应抱怨void的第二个参数传递。replaceObjectAtIndex:withObject:

于 2012-08-27T01:19:18.970 回答
1

replaceObjectAtIndex 的返回类型为 void,这就是您收到该错误的原因。您的意图是添加数组,但您只是添加整个表达式的结果,这是无效的。您需要将 replaceObjectAtIndex 方法作为单独的一行,然后使用数组作为对象参数。

于 2012-08-27T01:20:58.627 回答