Tôi đang làm việc trên một dự án ban đầu được xây dựng trong XCode 4.0, và sau đó di chuyển sang sử dụng XCode 4.2. Bây giờ tôi đã thử nghiệm di chuyển sang XCode 4.5 và tôi nhận được rất nhiều cảnh báo như bên dưới ...XCode 4.5 cảnh báo về xung đột tên phương thức giữa Danh mục cho lớp cha/con
instance method 'values' in category from <pathToTheFile>/HistoryObject+extras.o conflicts with same method from another category
Những cảnh báo này không bao giờ xuất hiện trong các phiên bản trước của XCode và mã không thay đổi.
Dự án được đặt ở iOS 4.3 cho Mục tiêu triển khai. Vì vậy, chúng tôi có từ một nhà phát triển trước một loạt các lớp DAO mà tôi tin là được tạo tự động từ CoreData, và sau đó mỗi lớp này có một Danh mục mở rộng nó để triển khai một số phương thức nhất định. Tôi sẽ đưa ra một ví dụ ...
Chúng tôi có một lớp cơ sở có tên LisaObject kế thừa từ NSManagedObject và nó có một danh mục tên là LisaObject + extras. Trong phần bổ sung của LisaObject +, có một phương thức có tên là "các giá trị" trả về một NSMutableDictionary.
Sau đó, chúng tôi có một lớp có tên là HistoryObject kế thừa từ LisaObject. Ngoài ra còn có một Category cho HistoryObject được đặt tên là HistroyObject + extras. Danh mục này cũng có một phương thức có tên là "giá trị". Trong phương thức giá trị bổ sung HistoryObject +, nó gọi [siêu giá trị], và sau đó kiểm tra một số điều kiện và đặt một số giá trị bổ sung trong từ điển không được đặt trong phương thức lớp cơ sở.
Sau đó, chúng tôi có một lớp có tên LessonStatusObject kế thừa từ HistoryObject và nó cũng có danh mục Tên là LessonStatusObject +, có một phương thức có tên là giá trị. Phương thức giá trị này cũng gọi [siêu giá trị] và sau đó thực hiện một số công việc bổ sung trên từ điển được trả về.
Đối với mỗi phương pháp "giá trị" này, chúng tôi nhận được cảnh báo tại thời gian biên dịch như được hiển thị ở trên, trong đó Danh mục có phương pháp có tên xung đột.
Tôi có một vài câu hỏi về điều này.
Trước tiên, việc triển khai này có thể gây ra bất kỳ vấn đề chính đáng nào hay những cảnh báo này thường lành tính? Tôi đã cố gắng để suy nghĩ về cách thực hiện này có thể gây ra một sự mơ hồ trong thời gian chạy, nhưng tôi không thấy làm thế nào mà có thể xảy ra.
Thứ hai, có điều gì mà tôi nên làm để sửa những cảnh báo này (và tôi không có nghĩa là chỉ khiến chúng ngừng xuất hiện; ý tôi là sửa chữa nguyên nhân)? Có cách nào khác chúng ta nên đi về việc này?
Ngoài ra, tại sao XCode 4.2 không cảnh báo về điều này, nhưng XCode 4.5 cảnh báo?
Tôi có hiểu nhầm điều gì về Danh mục không? Ý tôi là, nếu phương thức "values" thực sự là một phần của việc thực hiện từng lớp, thì sẽ không có vấn đề gì khi ghi đè chúng theo cách chúng ta làm, nhưng trình biên dịch dường như chỉ đơn giản là vì đây là các Category. Có điều gì không an toàn về điều này không?
Bất kỳ lời khuyên nào được đánh giá cao.
CHỈNH SỬA: Chỉ để cung cấp thêm thông tin ... Khi chúng tôi đang sử dụng XCode 4.2, dự án có trình biên dịch được đặt thành Apple LLVM Compiler 3.0. Bây giờ khi tôi mở dự án trong XCode 4.5, nó có trình biên dịch được đặt thành Apple LLVM Compiler 4.1.
Hãy tìm hiểu cách phân biệt giữa IDE (Xcode) và trình biên dịch (Clang, tôi giả sử). Trình biên dịch là trình biên dịch cho bạn các cảnh báo chứ không phải Xcode. Xcode chỉ là giao diện người dùng. –