2013-02-01 29 views
5

Tôi đang đọc về mục tiêu-c (một cuốn sách nông trại nerd), và tôi không thể không suy nghĩ về câu hỏi này: Làm thế nào để quyết định loại bộ sưu tập, NSArray hoặc NSDictionary (cả hai có hoặc w/o subclasses mutable của họ) , để sử dụng khi đọc nội dung từ URL?NSDictionary Vs. NSArray

Giả sử bạn đang đọc dữ liệu JSON từ tập lệnh PHP (kịch bản đang xử lý), để sử dụng? Tôi biết nó được nêu trong nhiều tài liệu tham khảo mà nó phụ thuộc vào cấu trúc dữ liệu (tức là JSON), nhưng có thể phác thảo rõ ràng về hai cấu trúc được phác họa không?

Cảm ơn tất cả các bạn đã giúp đỡ :)

Trả lời

2

Bạn muốn sử dụng NSArray khi đã bao giờ bạn có một bộ sưu tập cùng loại của các đối tượng, và NSDictionary khi bạn có các thuộc tính trên một đối tượng.

Nếu bạn có, giả sử đối tượng person có chứa name, phone numberemail bạn sẽ đặt nó trong từ điển.

Làm như vậy cho phép thứ tự các giá trị là ngẫu nhiên và cung cấp cho bạn mã đáng tin cậy hơn.

Nếu bạn muốn có nhiều hơn thì một người bạn có thể đặt đối tượng người đó vào một mảng.

Làm như vậy cho phép bạn lặp lại các đối tượng người dùng.

+0

Không đồng ý - điều gì sẽ xảy ra nếu bạn muốn tra cứu các đối tượng 'Khách hàng' theo số điện thoại của họ? Có rất nhiều lý do hợp lệ cho các từ điển giữ các đối tượng đồng nhất. –

+0

Tôi sẽ yêu cầu bạn làm nổi bật điểm của bạn với mã giả hoặc mẫu để biết rõ câu trả lời của bạn –

+0

@CarlVeazey tất nhiên có những trường hợp bạn có nhu cầu cụ thể. Bằng cách sử dụng các mảng, bạn có thể tạo một chương trình phụ trợ tổng quát hơn, có thể trích xuất dữ liệu từ cơ sở dữ liệu và tạo JSON cho bạn. – EsbenB

10

NSArray về cơ bản chỉ là một bộ sưu tập các đối tượng được sắp xếp, có thể được truy cập theo chỉ mục.
NSDictionary cung cấp quyền truy cập vào đối tượng của nó bằng khóa (thường là NSStrings, nhưng có thể là bất kỳ loại đối tượng nào như bảng băm).

Để tạo biểu đồ đối tượng từ chuỗi JSON được tải qua URL, bạn sử dụng NSJSONSerialization, tạo cấu trúc đối tượng mục tiêu-C. Đối tượng kết quả phụ thuộc vào chuỗi JSON. Nếu phần tử cấp cao nhất trong JSON của bạn là một mảng (bắt đầu bằng "["), bạn sẽ nhận được NSArray. Nếu phần tử cấp cao nhất là đối tượng JSON (bắt đầu bằng "{"), bạn sẽ nhận được một NSDictionary.

0

"withContentOfURL" hoặc "withContentOfFile" yêu cầu dữ liệu trong URL hoặc tệp phải ở định dạng cụ thể do Cocoa yêu cầu. JSON là không phải là định dạng đó. Bạn chỉ có thể sử dụng các phương pháp này nếu bạn đã tự ghi dữ liệu vào tệp hoặc URL ở vị trí đầu tiên, với cùng một dữ liệu. Nếu bạn viết một NSArray, bạn có thể đọc một NSArray. Nếu bạn viết một NSDictionary, bạn có thể đọc một NSDictionary. Mọi thứ khác sẽ thất bại.

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