2010-02-09 32 views
17

tôi đã tự hỏi có hay không nó có thể sử dụng phương pháp NSCoder:Encode NSArray hoặc NSDictionary sử dụng NSCoder

- (void)encodeObject:(id)objv forKey:(NSString *)key 

để mã hóa hoặc một thể hiện của NSArray hoặc NSDictionary. Nếu không làm thế nào để bạn đi về mã hóa chúng? Tôi đang cố gắng sử dụng NSKeyedArchived/NSKeyedUnarchiver để gửi dữ liệu giữa các điện thoại bằng GameKit. Tôi đã thử nó và dường như không thể lấy được chuỗi mà tôi đã lưu trong mảng của mình. Lớp gói mà tôi tạo ra đi kèm với số nguyên kiểu gói, nhưng không phải là dữ liệu trong mảng đó.

Cảm ơn trước!

+0

Đó là NSManagedObject tùy chỉnh .... Tôi nghĩ tôi phải sử dụng XML hoặc JSON cho điều này, nhưng tôi cần phải tìm hiểu cách D: –

Trả lời

10

NSKeyedArchiver/Unarchiver nên mã hóa và giải mã NSArrays và NSDictionaries mà không có vấn đề gì. Nếu lớp gói của bạn, bạn đã tạo thực hiện các giao thức NSCoding, bạn cần phải gọi một cách rõ ràng [encodeObject:myNsArrayforKey:@"stringsArray"] trong phương pháp -encodeWithCoder: của bạn (giả định rằng myNsArray là tên của biến dụ trong đối tượng gói mà bạn muốn mã hóa). Nhưng sau đó các archiver và NSArray nên chăm sóc phần còn lại của nó. Nếu bạn đang làm điều này, nó sẽ rất hữu ích để nghe thêm về cách bố trí của các lớp học của bạn và ai đang gọi ai khi mã hóa/giải mã.

31

Nếu mảng hoặc từ điển là đối tượng gốc bạn nên làm

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray]; 

hoặc

BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath]; 

Nếu nó là một biến thể hiện của một lớp tùy chỉnh, trong phương pháp -encodeWithCoder: nên làm

[coder encodeObject:someArray forKey:@"someArray"]; 

và sau đó theo phương pháp -initWithCoder:

someArray = [[coder decodeObjectForKey:@"someArray"] retain]; 
20

Bạn đang lưu trữ loại đối tượng nào trong mảng? Đảm bảo rằng tất cả các đối tượng được lưu trữ trong mảng thực hiện giao thức NSCoding.

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