Note that there are some explanatory texts on larger screens.

plurals
  1. POWhy is NSUserDefaults unwilling to save my NSDictionary?
    primarykey
    data
    text
    <p>I'm using KVC to serialize an <code>NSObject</code> and attempt to save it to <code>NSUserDefaults</code>, which is giving me an <code>Attempt to insert non-property value</code> when I try to store my <code>NSDictionary</code>.</p> <p>Following are the properties of the object in question, <code>MyClass</code>:</p> <pre><code>@interface MyClass : NSObject @property (copy,nonatomic) NSNumber* value1; @property (copy,nonatomic) NSNumber* value2; @property (copy,nonatomic) NSString* value3; @property (copy,nonatomic) NSString* value4; @property (copy,nonatomic) NSString* value5; @property (copy,nonatomic) NSString* value6; @property (copy,nonatomic) NSString* value7; @property (copy,nonatomic) NSString* value8; @end </code></pre> <p>When it is time to save MyClass it occurs here:</p> <pre><code>-(void)saveMyClass { NSArray* keys = [NSArray arrayWithObjects: @"value1", @"value2", @"value3", @"value4", @"value5", @"value6", @"value7", @"value8", nil]; NSDictionary* dict = [self dictionaryWithValuesForKeys:keys]; for( id key in [dict allKeys] ) { NSLog(@"%@ %@",[key class],[[dict objectForKey:key] class]); } NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:dict forKey:[NSString stringWithString:kMyClassKey]]; [defaults synchronize]; } </code></pre> <p>which produces this output:</p> <pre><code>2012-02-23 19:35:27.518 MyApp[10230:40b] __NSCFConstantString __NSCFNumber 2012-02-23 19:35:27.519 MyApp[10230:40b] __NSCFConstantString __NSCFNumber 2012-02-23 19:35:27.519 MyApp[10230:40b] __NSCFConstantString __NSCFString 2012-02-23 19:35:27.519 MyApp[10230:40b] __NSCFConstantString __NSCFString 2012-02-23 19:35:27.520 MyApp[10230:40b] __NSCFConstantString __NSCFString 2012-02-23 19:35:27.520 MyApp[10230:40b] __NSCFConstantString __NSCFString 2012-02-23 19:35:27.520 MyApp[10230:40b] __NSCFConstantString __NSCFString 2012-02-23 19:35:27.520 MyApp[10230:40b] __NSCFConstantString NSNull 2012-02-23 18:38:48.489 MyApp[9709:40b] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '{ value1 = "http://www.google.com"; value2 = "MyClassData"; value3 = 8; value4 = "&lt;null&gt;"; value5 = "http://www.google.com"; value6 = 1; value7 = "http://www.google.com"; value8 = 4SY8KcTSGeKuKs7s; }' of class '__NSCFDictionary'. Note that dictionaries and arrays in property lists must also contain only property values.` </code></pre> <p>As you can see, all of the objects in the <code>dict</code> are property list values and all of its keys are <code>NSString*</code>. What trivia am I lacking in order to execute this? Or should I give up and use <code>writeToFile</code> or similar?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload