Nie rozumiem, dlaczego mogę zarchiwizować struktury CGPoint
, ale nie można ich użyć w postaci CLLocationCoordinate2D
. Czym się różni archiwizer?NSKeyedArchiver kończy się niepowodzeniem ze strukturami CLLocationCoordinate2D. Czemu?
Platforma to iOS. Biegnę w symulatorze i nie próbowałem na urządzeniu.
// why does this work:
NSMutableArray *points = [[[NSMutableArray alloc] init] autorelease];
CGPoint p = CGPointMake(10, 11);
[points addObject:[NSValue valueWithBytes: &p objCType: @encode(CGPoint)]];
[NSKeyedArchiver archiveRootObject:points toFile: @"/Volumes/Macintosh HD 2/points.bin" ];
// and this doesnt work:
NSMutableArray *coords = [[[NSMutableArray alloc] init] autorelease];
CLLocationCoordinate2D c = CLLocationCoordinate2DMake(121, 41);
[coords addObject:[NSValue valueWithBytes: &c objCType: @encode(CLLocationCoordinate2D)]];
[NSKeyedArchiver archiveRootObject:coords toFile: @"/Volumes/Macintosh HD 2/coords.bin" ];
mam awarię na 2 archiveRootObject
a ten komunikat zostanie wydrukowany do konsoli:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedArchiver encodeValueOfObjCType:at:]: this archiver cannot encode structs'
Dzięki; to doskonałe wyjaśnienie! Powołam to w moim raporcie radarowym :) – TomSwift