2012-12-24 13 views
6

Tôi đang phát triển một khung mục tiêu c dựa trên cảm ứng Cocoa và đang xem các khuôn khổ khác để phân tích cú pháp dữ liệu, cho cả JSON và XML.Cách tốt nhất để liên kết có điều kiện dựa trên tính sẵn có của chúng trong Xcode sử dụng Objective-C

Tôi muốn nhà phát triển dễ sử dụng để sử dụng khung của tôi và tôi tự hỏi cách tốt nhất để bao gồm khung bên thứ ba có điều kiện là gì. Tôi muốn cung cấp tín dụng khi tín dụng đến hạn, vì vậy tôi không muốn đưa các dự án khác vào phân phối, nhưng tôi muốn nhà phát triển có thể thêm một khung (hoặc thậm chí chỉ là một loạt các lớp) như SBJson hoặc Chạm vào XML và có codebase của tôi để xem codebase đi kèm và sử dụng nó với chức năng bổ sung mà nó cung cấp. Bật khung thông qua một số loại tệp cấu hình hoặc trong cài đặt dự án cũng là một tùy chọn nhưng ít lý tưởng hơn.

  1. Cách tốt nhất để làm điều này với cài đặt trình biên dịch là gì? Tôi có thấy rất nhiều nhà phát triển chuyển đổi các khung được bao gồm từ "Bắt buộc" thành "Tùy chọn", nhưng tôi không nghĩ rằng SBJson hoặc Touch XML được biên dịch xuống hoặc được triển khai bằng gói khung mục tiêu mục tiêu-c.) hoặc thư viện tĩnh C (.a) và do đó sẽ không thể tận dụng điều này.

  2. Làm cách nào để thực hiện điều này trong mã? Ví dụ: Tiêu đề của SBJson được nhập thông qua chỉ thị trình biên dịch , nhưng điều này sẽ thất bại nếu không tìm thấy tiêu đề bắt buộc.

+0

Cách "dễ nhất" sẽ là để kiểm tra các tiêu đề bao gồm bảo vệ (bạn đã biết, toàn bộ # xác định Xcode điều HAS_MYHEADER_DECL sẽ bao gồm khi bạn tạo tiêu đề ac) và thực hiện một số phép biên dịch có điều kiện dựa trên đó. Tất nhiên, điều này không đáng tin chút nào. – CodaFi

Trả lời

3

Bạn có thể bao gồm các .h nhưng khi sử dụng một đối tượng từ nó, bạn cần phải gọi nó với NSClassFromString

+0

Đó sẽ là một cách tốt, nhưng sẽ không LLVM/Xcode ném một lỗi nếu tập tin .h không được tìm thấy. – KellyTheDude

+1

Whoa! Đừng bận tâm. Tôi thấy những gì bạn đang nhận được. Sử dụng NSClassFromString người ta có thể khởi tạo lớp bằng cách sử dụng alloc và init, và việc kiểm tra tập tin tiêu đề không ném một lỗi thông báo rằng lớp đó không được bao gồm. Nói cách khác, việc sử dụng NSClassFromString() hoàn toàn bỏ qua các chỉ thị nhập khẩu biên dịch thời gian. Loại giống như đi qua một thể hiện bằng cách sử dụng một tin nhắn với id và gửi tin nhắn cho nó. Ma thuật! Cảm ơn bạn! – KellyTheDude

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