我想有一种方法可以

setData:(SomeClassName *)data inPosition:(NSInteger)position


在实施中,检查nil是否为位置。这个想法是,如果提供了职位,我将使用它,如果没有,我将自动分配它。

问题是如果没有编译器警告,我无法将NULL或nil传递给它。

我相信我已经在其他地方看到了这种模式(可选参数)。我认为它可能与NSIndexPath有关。

我应该使用NSNumber作为包装器吗?还是还有其他秘密?

顺便说一句,我考虑使用单独的方法-setData:和setData:inPosition:。但是问题在于“数据”是创建的核心数据属性,而不是常规的ivar,因此,当我实际上想设置该值时,我必须记住要发送所有KVO消息。例如,在setData:withPosition内部,我不能调用标准setData:-它会覆盖我对该位置所做的任何工作。

也将有兴趣知道哪个是这两者的“更好”的解决方案。

最佳答案

@Justin的方法通常是最合适的。但是,对于有关setData:和KVO的问题,需要注意以下几点:


只要方法名为setFoo:,就会自动发送KVO通知。即使您覆盖setFoo:,KVO也会使用正确的KVO通知调用包装您的实现。这很可能是可可粉中最神奇的东西。 (我曾经确定这是最神奇的事情,但是我开始怀疑块变量作用域,尤其是如何将块从堆栈移动到堆;这可能更神奇。)
如果您需要直接设置Core Data属性,而绕过KVO和其他所有可能的魔术,则可以使用原始访问器。 setPrimitiveData:setData:用来设置属性的基础方法。您不应覆盖原始访问器。




@Justin似乎已删除他的答案。这里的典型解决方案是声明setData:setData:inPosition:(顺便说一句,作为读者,我不知道“ inPosition”是什么意思。我希望在上下文中有意义)。 setData:会调用setData:inPosition:来应用找出“位置”所需的任何内容。

关于objective-c - 我可以将NSInteger设置为方法的可选参数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10004247/

10-11 14:21