I am writing an application that uses NSUserDefaults as a data storage mechanism, and I encounter a problem when trying to save data (which correspond to property list protocols):
+ (BOOL)storeAlbum:(Album *)album { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *albums = (NSMutableDictionary *)[prefs objectForKey:@"my_adventure_book_albums"]; NSLog(@"Existing albums: %@",albums); if (!albums) albums = [NSMutableDictionary dictionaryWithObject:album forKey:@"album"]; else [albums setObject:album forKey:@"album"]; NSLog(@"%@",album); [prefs setObject:albums forKey:@"my_adventure_book_albums"]; return [prefs synchronize]; }
I get this output:
2010-06-29 17:17:09.929 MyAdventureBook[39892:207] Existing albums: (null) 2010-06-29 17:17:09.930 MyAdventureBook[39892:207] test 2010-06-29 17:17:09.931 MyAdventureBook[39892:207] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '{ album = test; }' of class 'NSCFDictionary'.
The album description method is as follows:
- (NSString *)description { // Convert to a NSDictionary for serializing if (!title) title = @""; if (!date) date = [NSDate dateWithTimeIntervalSinceNow:0]; if (!coverImage) coverImage = @""; if (!images) images = [[NSArray alloc] initWithObjects:@"",nil]; //NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:title,date,coverImage,images,nil] forKeys:[NSArray arrayWithObjects:@"title",@"date",@"coverImage",@"images",nil]]; //NSDictionary *dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:title,nil] forKeys:[NSArray arrayWithObjects:@"title",nil]]; //return [dict description]; return @"test"; }
All commented lines have the same result, so I just decided to see if the NSString "test" would work, which it (of course) does not.
source share