2012-02-20 27 views
6

Cách nào là cách thanh lịch nhất để nhận dữ liệu từ API JSON truyền trực tuyến bằng AFNetworking? AFNetworking cung cấp hỗ trợ tuyệt vời để nhận dữ liệu không trực tuyến từ các API JSON, nhưng tôi không thể tìm thấy bất kỳ ví dụ nào về truyền trực tuyến JSON.Chạy JSON với AFNetworking trên IOS

+0

Bạn đã bao giờ nhận được một cái gì đó như thế này làm việc? –

+0

Theo như tôi nhớ, tôi đã quản lý để thực hiện một ví dụ streaming JSON rất đơn giản, nhưng ngay sau đó, tôi quan tâm đến dự án IOS mà tôi cần cho (ví dụ: một khách hàng của CampFire) đã giảm xuống. Không có gì hoàn thành không may đã từng bước ra khỏi điều này. :) – akisaarinen

+0

Đủ công bằng. Cảm ơn các cập nhật! –

Trả lời

12

AFNetworking không có hoạt động JSON kiểu SAX trực tuyến được tích hợp sẵn, nhưng nó nên được chuyển tiếp thẳng để tạo của riêng bạn.

  • Tạo một lớp con của AFJSONRequestOperation
  • Sử dụng outputStream tài sản của các hoạt động trong quá trình khởi để móc nó lên đến một phân tích cú pháp JSON có hỗ trợ phân tích cú pháp SAX-phong cách (chẳng hạn như Yajl). Trình phân tích cú pháp sẽ đọc dữ liệu và xây dựng đối tượng JSON như trong số
  • Treo tài sản responseJSON để đọc đối tượng được lưu trong bộ lọc từ trình phân tích cú pháp
  • ... hoặc tùy thuộc vào cách bạn đang phát trực tuyến, bạn có thể cần để thêm một thuộc tính mới định nghĩa một khối để thực hiện khi các đối tượng JSON mới trở lại (ví dụ: setReceivedJSONBlock:((^)(void (id JSON))block). Khối này có thể sẽ được kích hoạt bằng các phương thức ủy nhiệm được gửi từ trình phân tích cú pháp (ví dụ: <YAJLParserDelegate> -parserDidEndDictionary:).

Nếu bạn có thể làm việc này, tôi sẽ khuyến khích bạn xuất bản và chia sẻ điều này với người khác. Tôi nghĩ điều này có thể hữu ích đối với một vài người.

+1

Cảm ơn câu trả lời, tôi sẽ thử phương pháp được đề xuất! – akisaarinen

+2

Tính năng này sẽ không hoạt động dễ dàng với AFNetworking. Đầu tiên, phương thức kết nối của AFURLConnectionOperation: didReceiveData: không được triển khai đúng. Nó chỉ hoạt động đối với các luồng luôn sử dụng TẤT CẢ byte do kết nối cung cấp. Điều này bao gồm các luồng tệp và luồng bộ nhớ. Tuy nhiên, để "giao diện" API luồng của trình phân tích cú pháp với NSURLConnectionDelegate, một phương pháp phức tạp hơn là cần thiết liên quan đến một số "hàng đợi đồng bộ" như một phương tiện để truyền dữ liệu và luồng được ghép nối có bộ đệm kích thước cố định. – CouchDeveloper

+0

Bạn có thể giải thích thêm một chút về điều này không? Làm cách nào để kết nối outputStream với trình phân tích cú pháp JSON? –

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