NSMutableArray removeObject:抛出错误

时间:2014-09-25 14:35:15

标签: objective-c macos cocoa nsmutablearray

我有@property (nonatomic,copy) NSMutableArray* children;,我在这个数组中添加/删除项目。

这里出人意料:

- (void)addChildDocument:(PPDocument *)doc {
    [_children addObject:doc];
}

- (void)removeChildDocument:(PPDocument*)doc {

    [_children removeObject:doc];
}

第一个工作正常。第二个没有。

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

您能否详细向我解释一下发生了什么以及children阵列突然显示为不可变的方式?


更新

问题已经解决。然而,尽管它可能会让你觉得奇怪,但copy大多数人提到的问题与此问题无关。奇怪的是,它与每个parent的{​​{1}}属性未被正确设置为PPDocument有关。一旦我这样做(并保持weak原样),一切正常 - 正如预期的那样。并且children仍然是可变的。

2 个答案:

答案 0 :(得分:-1)

你一定在做:

obj.children = @[ @"Some", @"immutable", @"array" ];

这些电话之间。

答案 1 :(得分:-3)

您无法移除您在方法中添加的内容。你需要给他一个数组索引。

例如,

[_children removeObject:[_children lastObject]];

如果你知道它总会成为最后一个。

如果不是,请提供评论,说明对象的位置。

编辑:实际上你可以做到以下几点,你也可以试试吗?

[_children removeObjectAtIndex:[_children indexOfObject:doc]];