Cá nhân tôi sử dụng miền kiểu DNS ngược. Ví dụ:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
Phần thứ ba của miền ( @"myproject"
) chỉ được sử dụng để phân biệt lỗi của dự án này ( "My Project"
) với lỗi trong dự án khác ( "My Other Project"
=> com.davedelong.myotherproject
).
Đó là một cách đơn giản để đảm bảo rằng tôi sẽ không xung đột với miền lỗi của bất kỳ ai khác (nếu tôi đang sử dụng mã của bên thứ 3), trừ khi nhà phát triển đó cố tình cố tình gây rối với chỉ tôi (điều mà tôi tin là rất khó xảy ra. ..).
Đối với xung đột đánh số mã, đừng lo lắng về điều đó. Miễn là mã là duy nhất trong một miền , bạn sẽ ổn.
Còn về lỗi dịch thì tùy bạn. Dù bạn làm gì, hãy đảm bảo rằng bạn ghi chép nó tốt. Cá nhân tôi thường chỉ chuyển các lỗi do khuôn khổ tạo ra khi chúng đến với tôi, vì tôi không bao giờ chắc chắn rằng tôi sẽ xử lý tất cả các mã và dịch tất cả userInfo thành một cái gì đó cụ thể hơn cho dự án của tôi. Các khuôn khổ có thể thay đổi và thêm nhiều mã hoặc thay đổi ý nghĩa của các mã hiện có, v.v. Nó cũng giúp tôi xác định cụ thể hơn lỗi đến từ đâu. Ví dụ: nếu khuôn khổ StackKit của tôi tạo ra lỗi trong com.stackkit
miền, tôi biết rằng đó là sự cố khung. Tuy nhiên, nếu nó tạo ra lỗi trong NSURLErrorDomain
, thì tôi biết rằng nó đặc biệt đến từ cơ chế tải URL.
Những gì bạn có thể làm là nắm bắt lỗi do khung công tác tạo ra và bọc nó trong một đối tượng lỗi mới có tên miền của bạn và mã chung, một cái gì đó tương tự kFrameworkErrorCodeUnknown
hoặc một cái gì đó, rồi đặt lỗi đã bắt vào bên userInfo
dưới NSUnderlyingErrorKey
. CoreData thực hiện điều này rất nhiều (ví dụ, nếu bạn cố gắng save:
một NSManagedObjectContext
, nhưng bạn phải lỗi vẹn mối quan hệ, bạn sẽ nhận được một lỗi lại duy nhất, nhưng NSUnderlyingErrorKey
sẽ chứa nhiều thông tin hơn, giống như đặc biệt mà các mối quan hệ là sai, vv).