2012-06-04 49 views
0

我有一個模型對象,表示一個三角形。有一些初始化方法採用已知的不同參數組合。然後它解決剩餘的值(邊和角度的長度)。目前,如果給定的參數爲零或超出此三角形類型的適當範圍,則初始化程序返回nil。但是,爲了給用戶提供適當的反饋,控制器對象還必須檢查不正確的輸入值,例如角度> 90度等。這對我來說太臭了,因爲這些規則應該在模型中定義一次。所以我的想法是將一個NSError對象設置爲控制器應該向用戶顯示的字符串。我只是不確定傳達給控制器的最佳方式。如果發生錯誤,我的init方法是否應該返回此NSError而不是Triangle實例?這似乎是錯誤的。或者我將指向NSError對象的指針作爲參數傳遞給init,並在發生錯誤時填充它?如果我這樣做,我仍然返回nil從三角形對象的init,因爲它不可用或我只是部分初始化三角形並返回它?啓動模型對象時返回錯誤的最佳方法是什麼?

回答

2

您應該遵循其他Cocoa對象使用相同的約定,如蘋果公司的Error Handling Programming Guide描述:

  • 添加參數,它接受一個NSError**作爲最後一個參數的方法。
  • 出錯時,如果該參數不是NULL,請用NSError對象填充它並返回nil
  • init方法的情況下,在返回nil(除非您使用ARC)之前,您還應該使用[self release]
1

如果您想詳細的錯誤信息,或者:

  1. 拋出一個異常。這正是他們的目的。

  2. 提供,僅僅驗證輸入的方法,如

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

呼叫,創建對象之前。這樣你就可以在內部共享任何驗證碼,而不會在對象外複製它。

如果您懷疑您的想法不正確,那麼讓您的init方法返回除正確類型的工作對象之外的其他任何東西。在init上取一個NSError指針是可以的,但對我來說似乎有點笨拙。

相關問題