在启动模型对象时返回错误的最佳方法是什么?

时间:2012-06-04 00:49:01

标签: objective-c ios

我有一个代表三角形的模型对象。有一些init方法采用已知的不同参数组合。然后它解决剩余的值(边长和角度)。目前,如果给定参数为零或超出此三角形类型的适当范围,则初始化程序返回nil。然而,为了向用户提供适当的反馈,控制器对象还必须检查不正确的输入值,例如角度>。 90度等。这对我来说很糟糕,因为这些规则应该只在模型中定义一次。所以我的想法是将一个NSError对象设置为控制器应该向用户显示的字符串。我只是不确定将此传达给控制器的最佳方式。如果发生错误,我的init方法是否应该返回此NSError而不是Triangle实例?这似乎是错的。或者我将指向NSError对象的指针作为init的参数传递,如果发生错误则填充它?如果我这样做,我仍然从三角形对象的init返回nil,因为它不可用或者我只是部分地初始化三角形并返回它?

2 个答案:

答案 0 :(得分:2)

您应遵循其他Cocoa对象使用的相同约定,如Apple Error Handling Programming Guide中所述:

  • 添加一个参数,该参数将NSError**作为方法的最后一个参数。
  • 如果出现错误,如果该参数不是NULL,请使用NSError对象填充该参数并返回nil
  • 对于init方法,在返回[self release]之前,您还应该nil(除非您使用的是ARC)。

答案 1 :(得分:1)

如果您需要详细的错误消息,请执行以下操作:

  1. 抛出异常。这正是它们的用途。

  2. 提供仅验证输入的方法,例如

  3. + (NSError *)errorFromValidationOfSide:(float)a size:(float)b;

    在创建对象之前调用它。这样,您可以在内部共享任何验证代码,而不是在对象外部复制它。

    让你的init方法返回正确类型的工作对象以外的任何东西,正如您所怀疑的那样,是一个坏主意。在init上使用NSError指针是可以的,但对我来说似乎有点笨拙。