2012-08-27 16 views
0

好的。我一直在尝试组织这个nsmutable数组,所以我的程序可以按照我想要的方式使用它。努力用NSNumber数据类型编辑NSMutableArray

我从一个标准的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中说,问题是在第二行,我刚添加的firrst了一下在上下文中。结果是一个NSNumber,tmp也是一个NSMutableArray。 Xcode说这个错误是“将'Void'发送给不兼容类型'id'”的参数。

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

+0

什么是结果? –

+1

当你得到奇怪的错误信息时,总是一个好主意,把复杂的表达式分解成单独的行。这可以让你确定哪个特定的结构会引发错误。 –

+0

谢谢热舔。这似乎是杰克劳伦斯在我选择的答案中所说的:)。正如你所猜测的,我是比较新的,昨晚凌晨3点这样做:/。我发布了这个,然后昨晚坠毁:)。 –

回答

3

让我们分解线[tmp replaceObjectAtIndex:x withObject: [array replaceObjectAtIndex:2 withObject: result]];

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

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

[tmp replaceObjectAtIndex:x withObject: void],因此通过voidreplaceObjectAtIndex:withObject:第二个参数,它的Xcode应该理所当然地抱怨。

+1

谢谢你!!!!我在这里坚持了一个小时,带着大量随机的无关紧要的东西:)。 Soooo简单一旦你看到它:P。 –

1

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

+0

感谢您的评论! :)这确实是问题:)。 –