2013-10-12 31 views
0

基本上我有一个我想存储在NSUserDefaults中的数组。 pageDict是当地的NSDictionary LyteData用来存放东西 层级从lyteData.textbookDictArray ---> lyteData.pagesDictArray ---> pageDict(NSDictionary中)尝试在NSUserDefaults中存储nsdictionaries数组时出错

[pageDict setObject:textbookImage forKey:@"image"]; 
    [pageDict setObject:textbookName forKey:@"name"]; 
    [pageDict setObject:page forKey:@"page"]; 
    [pageDict setObject:nameOfClass forKey:@"class"]; 

    LyteData *lyteData = [LyteData sharedManager]; 
    [lyteData.pagesDictArray addObject:pageDict]; 


    [lyteData.textbookDictArray addObject:lyteData.pagesDictArray]; 
     NSLog(@"array: %@", lyteData.pagesDictArray); 
     NSLog(@"textbook array: %@", lyteData.textbookDictArray); 

    //THIS CODE IS FOR SAVING THE ARRAY OF TEXTBOOKS AS USERDEFAULT 
    [[NSUserDefaults standardUserDefaults] 
    setObject:lyteData.textbookDictArray forKey:@"textbookArray"]; 

我得到这个错误去一个Singleton类:

Attempt to set a non-property-list object (
     { 
     class = hb; 
     image = "<UIImage: 0x165c43d0>"; 
     name = fv; 
     page = 25; 
    } 
) as an NSUserDefaults value for key textbookArray 

如何将该数组存储在NSUserDefaults中?

+1

'NSUserDefaults'只能存储'premitive'对象(如NSArray,NSDictionary,NSString等),如果你想存储自定义对象,你需要使用技巧。 [引用我的帖子在这里存储自定义类对象](http://stackoverflow.com/questions/16519443/nsmutablearray-not-saved-nsuserdefault/16519672#16519672) –

回答

2

问题是你正试图存储一个UIImageNSUserDefaults这是不支持。有关解决方案,请参阅here

+0

存储为NSData的作品。谢谢 – Spenciefy

+2

更好的想法是在'NSUserDefaults'中只存储路径并将图像存储到应用程序的Documents目录中。 –

+0

我同意Akshit所说的。在NSUserDefaults中作为一个NSData存储将意味着你的图像数据总是被加载到内存中(NSUserDefaults一次加载整个plist)。 –

相关问题