2010-10-04 24 views
16

Tôi có một danh sách các đối tượng tùy chỉnh được trả về từ .NET WebService và đang lưu trữ chúng bằng cách sử dụng mối quan hệ To-Many từ sự phù hợp của cha mẹ với Dữ liệu cốt lõi.[NSSet allObjects] có trả về một mảng với cùng thứ tự mỗi lần không?

Tôi muốn sử dụng NSSet làm nguồn dữ liệu cho UITableView và đẩy bộ điều khiển mới vào ngăn xếp khi một hàng được chọn.

Khi sử dụng [NSSet allObjects] mảng có trả về luôn có cùng thứ tự không? (Tôi đoán không phải là bộ là không có thứ tự)

Nếu không, làm thế nào thì tôi có thể sử dụng NSArray *myArray = [mySet allObjects]; trong cellForRowAtIndexPath để có được tên cho textLabel của tế bào và sau đó một lần nữa trong didSelectRowAtIndexPath gán đối tượng cho ViewController sắp được đẩy ?

Tôi đã có đối tượng cha được tổng hợp trong UITableViewDelegate của mình. Tôi đã nghĩ về cũng có một NSArray tổng hợp và sử dụng allObjects chỉ một lần trong viewDidLoad để tạo ra nhưng điều này được sao chép dữ liệu trong bộ nhớ

Trả lời

7

giải pháp của bạn, trích xuất một NSArray lần trong viewDidLoad, là điều đúng. Bạn thực sự sẽ không sao chép nhiều bộ nhớ. Các đối tượng của bạn sẽ vẫn chỉ có trong bộ nhớ một lần; chỉ cần NSSetNSArray của bạn sẽ chứa cả con trỏ tới các đối tượng đó.

31

Không có sự đảm bảo rằng họ sẽ theo thứ tự, từ một NSSet không (về mặt kỹ thuật) duy trì trật tự. Nếu điều đó xảy ra, các đối tượng làm sẽ quay lại theo thứ tự giống nhau mỗi lần, sau đó hãy lưu ý rằng đó là chi tiết triển khai, không được ghi lại và có khả năng bị thay đổi trong bản phát hành khung tương lai.

Để báo the documentation:

(-[NSSet allObjects] lợi nhuận) [a] n mảng chứa các thành viên của bộ, hoặc một mảng rỗng nếu tập không có thành viên. Thứ tự của các đối tượng trong mảng không được xác định.

(nhấn mạnh thêm)

+0

Câu trả lời này thực sự có câu trả lời cho câu hỏi gốc. – Gomfucius

4

Sử dụng NSOrderedSet thay vì NSSet.

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