2012-03-31 25 views
5

Tôi có mã này trong một phương pháp prepareForSegueObjective-C Gọi một selector rằng trình biên dịch không tin tồn tại (mặc dù chúng ta biết nó)

// Get destination view 
    UIViewController *viewController = [segue destinationViewController]; 

    //See if it responds to a selector 
    if ([viewController respondsToSelector:@selector(setSomethingOrOther:)]) { 
     //if so call it with some data 
     [viewController setSomethingOrOther:something]; 
    } 

Đoạn mã trên có nghĩa là tôi không cần phải bao gồm tham chiếu đến lớp thực tế của bộ điều khiển xem đang được phân tách. Tôi có thể nhiều hơn một vài lỏng lẻo hai bộ điều khiển xem và chỉ cần kiểm tra xem nó phản ứng với một số tài sản được thiết lập trên nó.

Vấn đề là khi tôi làm điều này tôi nhận được lỗi sau biên dịch thời gian:

Không @ interface có thể nhìn thấy cho 'UIViewController' tuyên bố chọn 'setSomethingOrOther:'

đó là đúng tất nhiên . Tôi biết tôi có thể vượt qua nó bằng cách bao gồm một tham chiếu đến quan điểm nhưng tôi muốn giữ nó tách biệt. Làm thế nào tôi có thể làm việc xung quanh

Trả lời

10

Sử dụng phương pháp performSelector:aSelector này, sau đó bạn có thể gọi một selector không khai báo.

+0

Cảm ơn bạn, tôi cảm thấy như một thằng ngốc. Đã sử dụng điều này một chút công bằng trong các tình huống khác. –

7
[viewController performSelector:@selector(setSomethingOrOther:) 
        withObject:something]; 
+0

Đẹp, rõ ràng, mẫu mã +1 –

3

Bạn cũng có thể làm được điều này

[(id)viewController setSomethingOrOther:something]; 

trong một số tình huống, nhưng tôi trình biên dịch sẽ phàn nàn nếu nó không biết về sự tồn tại của setSomethingOrOther: ở tất cả, giống như một thư viện mà bạn chưa bao gồm tiêu đề cho.

+0

Đó thực sự là điểm của câu hỏi này; Tôi không muốn bao gồm tiêu đề. Tôi muốn chia tách nhiều hơn giữa ViewControllers của tôi. –

+0

Bạn đã không đọc câu trả lời của tôi đúng cách, điều này sẽ hoạt động nếu phương pháp được xác định ở đâu đó trong dự án của bạn mà bạn không muốn bao gồm tiêu đề. –

+0

oh đủ công bằng .. –

Các vấn đề liên quan