Converting an object to a dictionary to save as plist: invalid property list format

I want to save an array of objects to disk as a plist file.

First, I convert an array of objects to an array of equivalent dictionaries. There are no problems with some properties, but some of them give errors. Now I am trying to get a url property error. (Commented lines are also problematic, but now I am not working.

HEre is the interface of the YOEvento class.

#import <MapKit/MapKit.h> @interface YOEvento : NSObject { NSURL *url; // <url> NSInteger identificador; // <identificador> NSString *nombre; // stores the <name> tag NSDate *diaDeInicio; // stores the tag <dia-de-inicio> NSDate *diaDeFin; // stores the tag <dia-de-fin> NSString *entradilla; // stores the tag <entradilla> NSURL *foto; // <foto> CLLocationCoordinate2D localizacion; // <localizacion> BOOL isFavourite; } @property (nonatomic, retain) NSURL *url; @property NSInteger identificador; @property (nonatomic, retain) NSString *nombre; @property (nonatomic, retain) NSDate *diaDeInicio; @property (nonatomic, retain) NSDate *diaDeFin; @property (nonatomic, retain) NSString *entradilla; @property (nonatomic, retain) NSURL *foto; @property CLLocationCoordinate2D localizacion; @property BOOL isFavourite; @end 

Array Conversion Code

  // 1. Convert array of YoEvento in array of Dictionary to be able to save as plist NSMutableArray *tempArray = [NSMutableArray array]; for (YOEvento *evento in self.eventosFavouritesAppDel) { NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects: evento.url, // evento.identificador, evento.nombre, evento.diaDeInicio, evento.diaDeFin, evento.entradilla, // evento.foto, // evento.localizacion, nil] forKeys:[NSArray arrayWithObjects: kURLElement, // kIdentificadorElement, kNombreElement, kDiaDeInicioElement, kDiaDeFinElement, kEntradillaElement, // kFotoElement, // kLocalizacionElement, nil]]; [tempArray addObject:dict]; } // 2. Convert the array to NSData NSString *errorDesc; NSData *data = [NSPropertyListSerialization dataFromPropertyList:tempArray format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorDesc]; 

After the last commands, I get an error "invalid property list format" in errorDesc. The contents of the dictionary seem valid. Here is the runtime content log:

 Printing description of dict: <CFBasicHash 0x5b99170 [0x1298400]>{type = immutable dict, count = 5, entries => 0 : <CFString 0xfd00 [0x1298400]>{contents = "entradilla"} = <CFString 0x5b99b10 [0x1298400]>{contents = "Festival Internacional de Cine de Gij\u00f3n M\u00e1s informaci\u00f3n en www.gijonfilmfestival.com "} 2 : <CFString 0xfcd0 [0x1298400]>{contents = "nombre"} = <CFString 0x5b99590 [0x1298400]>{contents = "49 FICXix\u00f3n - Festival Internacional de Cine de Gij\u00f3n"} 4 : <CFString 0xfcb0 [0x1298400]>{contents = "url"} = <CFURL 0x5b992f0 [0x1298400]>{type = 15, string = http://www.gijon.es/eventos/show/18753-49-ficxixon-festival-internacional-de-cine-de-gijon, encoding = 134217984, base = (null)} 5 : <CFString 0xfcf0 [0x1298400]>{contents = "dia-de-fin"} = 2011-11-26 22:59:00 +0000 6 : <CFString 0xfce0 [0x1298400]>{contents = "dia-de-inicio"} = 2011-11-18 22:59:00 +0000 } 
+4
source share
1 answer

Property lists can contain only objects of a small number of classes: NSString , NSDate , NSNumber , NSArray , NSDictionary , NSData . If you want to represent other types (for example, NSURL ) in the property list, you must first convert it to one of the allowed types.

+8
source

All Articles