Ông Charbonneau có ý tưởng đúng. An NSCoder
tóm tắt các serialization cụ thể của đối tượng của bạn, và cho phép bạn lo lắng chỉ về những gì cần phải được serialized/deserialized. Trong -encodeWithCoder:
, bạn có thể muốn
NSAssert1([encoder allowsKeyedCoding],
@"%@ does not support sequential archiving.",
[self className]);
vì không phải tất cả các bộ lập trình đều hỗ trợ lưu trữ khóa.
Trong -initWithCoder
, bạn nên gửi -initWithCoder:
- không chỉ đơn giản -init
- để super
trước khi khởi tạo đối tượng của bạn:
self = [super initWithCoder:decoder];
if (!self) return nil;
// now use the coder to initialize your state
Ngoài ra, kể từ khi đối tượng của bạn về cơ bản là một danh sách bất động sản đã có, bạn có thể thêm một cái gì đó giống như -[Person plistRepresentation]
:
- (NSDictionary *)plistRepresentation
{
return [NSDictionary dictionaryWithObjectsAndKeys:
[self firstName], @"firstName",
[self lastName], @"lastName",
[NSNumber numberWithInteger:[self age]], @"age", nil];
}
Sau đó, để tuần tự hóa mảng Person
s, bạn có thể tự biến đổi người thành plistRepresentation
của họ và sau đó sử dụng -[NSArray writeToURL:atomically:]
. (Bạn có thể dĩ nhiên cũng sử dụng các phương pháp NSProperyListSerialization
trực tiếp.)
Nguồn
2009-05-04 12:44:43
loại bỏ những người đó; 's –
thực sự tôi đoán đó là không cần thiết, nó chỉ trông lạ hah –