我有一個模型對象,表示一個三角形。有一些初始化方法採用已知的不同參數組合。然後它解決剩餘的值(邊和角度的長度)。目前,如果給定的參數爲零或超出此三角形類型的適當範圍,則初始化程序返回nil。但是,爲了給用戶提供適當的反饋,控制器對象還必須檢查不正確的輸入值,例如角度> 90度等。這對我來說太臭了,因爲這些規則應該在模型中定義一次。所以我的想法是將一個NSError對象設置爲控制器應該向用戶顯示的字符串。我只是不確定傳達給控制器的最佳方式。如果發生錯誤,我的init方法是否應該返回此NSError而不是Triangle實例?這似乎是錯誤的。或者我將指向NSError對象的指針作爲參數傳遞給init,並在發生錯誤時填充它?如果我這樣做,我仍然返回nil從三角形對象的init,因爲它不可用或我只是部分初始化三角形並返回它?啓動模型對象時返回錯誤的最佳方法是什麼?
0
A
回答
2
您應該遵循其他Cocoa對象使用相同的約定,如蘋果公司的Error Handling Programming Guide描述:
- 添加參數,它接受一個
NSError**
作爲最後一個參數的方法。 - 出錯時,如果該參數不是
NULL
,請用NSError
對象填充它並返回nil
。 - 在
init
方法的情況下,在返回nil
(除非您使用ARC)之前,您還應該使用[self release]
。
1
如果您想詳細的錯誤信息,或者:
拋出一個異常。這正是他們的目的。
提供,僅僅驗證輸入的方法,如
+ (NSError *)errorFromValidationOfSide:(float)a size:(float)b;
呼叫,創建對象之前。這樣你就可以在內部共享任何驗證碼,而不會在對象外複製它。
如果您懷疑您的想法不正確,那麼讓您的init
方法返回除正確類型的工作對象之外的其他任何東西。在init上取一個NSError指針是可以的,但對我來說似乎有點笨拙。
相關問題
- 1. 從TSQL Proc返回錯誤的最佳方法是什麼?
- 2. 處理django模型對象的最佳方式是什麼?
- 3. 從函數返回錯誤的最佳做法是什麼?
- 4. 備份大型對象的最佳方法是什麼?
- 5. Objectify/AppEngine:計算查詢返回的對象數的最佳方法是什麼?
- 6. 將對象轉換爲單獨模型的最佳方法是什麼
- 7. 從函數返回錯誤信息的最佳方法是什麼?
- 8. 將回調值返回到啓動異步方法的函數的最佳方法是什麼?
- 9. 探索Rally對象模型最簡單的方法是什麼?
- 10. 什麼是刪除模型對象數組的最快方法?
- 11. 在Java中返回一對值的最佳方式是什麼?
- 12. 什麼是隻通過模型控制器(API包裝)更新模型對象的最佳方式是什麼
- 13. 從模型傳回錯誤信息的最佳方法?
- 14. 返回當前屬性名稱的最佳方法是什麼?
- 15. 在CakePhp模型中處理返回的最佳方式是什麼?
- 16. 使用可變對象返回只讀的最佳方式是什麼?
- 17. 在ruby中模擬第三方對象的最佳方法是什麼?
- 18. 創建公共信息模型的最佳方法是什麼?
- 19. 保存sklearn模型的最佳方法是什麼?
- 20. 將物業注入Sling模型的最佳方法是什麼?
- 21. Julia:爲庫設置OOP模型的最佳方法是什麼
- 22. 什麼是訪問活動中SQLiteDatabase對象的最佳方式
- 23. Java:什麼是讀取序列化對象的最佳方法?
- 24. 測試WebdriverIO「瀏覽器」對象的最佳方法是什麼?
- 25. 將R對象導入Python的最佳方法是什麼?
- 26. 什麼是不在__init中創建對象的最佳方法__()
- 27. 跨層/層處理對象圖的最佳方法是什麼?
- 28. 在JavaScript中刪除對象的最佳方法是什麼?
- 29. 將函數放入對象的最佳方法是什麼?
- 30. 將JSONObject轉換爲域對象的最佳方法是什麼?