在iOS中存储字典数据的位置

时间:2014-07-15 07:12:55

标签: ios nsdictionary

我正在开发iPhone应用程序,我有一个疑问

我有NSMutableDictionary,其中包含此格式的数据

dict at 0th index:

"ProductId":"77386",
"ProductImage":"http://static.abcd.com/images/product/large/design_gallery_slide_green - Copy (2).jpg",
"Productshortname":"Apple iPhone 5c 16GB",
"categorycode":null,
"categoryid":8,
"categoryimage":"",
"categoryshortname":"",
"favorite":"0",
"price":"31500",
"productnameinUrl":"apple-iphone-5c-16gb",
"storecount":"10"

dict at 1st index:

    "ProductId":"11386",
    "ProductImage":"http://static.abcd.com/images/product/large/design_gallery_slide_green - Copy (2).jpg",
    "Productshortname":"Apple iPhone 5s 16GB",
    "categorycode":null,
    "categoryid":8,
    "categoryimage":"",
    "categoryshortname":"",
    "favorite":"1",
    "price":"31500",
    "productnameinUrl":"apple-iphone-5s-16gb",
    "storecount":"18"

dict at 2nd index:

    "ProductId":"31386",
    "ProductImage":"http://static.abcd.com/images/product/large/design_gallery_slide_green - Copy (2).jpg",
    "Productshortname":"Apple iPhone 4s 16GB",
    "categorycode":null,
    "categoryid":8,
    "categoryimage":"",
    "categoryshortname":"",
    "favorite":"1",
    "price":"31500",
    "productnameinUrl":"apple-iphone-4s-16gb",
    "storecount":"38"

依旧......

我想要做的是,我想将此dictionary indexes存储在我的目录中的某些位置,我希望在一段时间后或甚至在关闭并在几次打开应用程序之后获取它。

我应该在哪里存储这类数据?这种数据有强大的存储空间吗?

请提前帮助和谢谢!!

7 个答案:

答案 0 :(得分:2)

您可以将数据存储在NSUserdefaults中,并可以随时随地访问

yourdict;//Your NSDictionary Object That contains the data to store

[[NSUserDefaults standardUserDefaults] setObject:yourdict forKey:@"dict"];

[[NSUserDefaults standardUserDefaults] synchronize];

在检索数据时,

dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"dict"]; 

答案 1 :(得分:1)

另一个选项(在我的经验中更好)是使用 - NSCoder,这个选项很棒,因为你可以使用具有普通属性的Object来访问你的数据,这使你的代码更具可读性。

您可以在此处阅读相关内容 - NSCoding / NSKeyed​Archiver by NSHipster

这是引用 - NSCoder docs

答案 2 :(得分:1)

您已经选择了经过批准的答案,但无论如何我都会想到这一点。

此信息看起来可能会变大。

用户默认设置不适用于大块数据。它真的意味着一小部分信息,比如布尔首选项等,不能被视为一个易于使用的数据库。

用户默认设置存在一些问题:

  1. 启动应用时会读取并解析默认文件,无论您当时是否需要其中的信息。这是因为您的应用程序的其他部分也使用它来存储它们的信息。
  2. 需要解析整个默认文件,以便您检索任何内容,即使您只需要一个条目。
  3. 您不会选择何时解析默认文件。如果它变得庞大(比如你把1000个产品放在那里),你就不能做任何智能线程。
  4. 我建议使用NSDictionary的writeToFile将字典写入其自己的plist :并使用initWithContentsOfFile读取:(这仍然会受到上面第2点的影响)

    OR

    使用CoreData / sqlite 将信息写入真实数据库

      

    NSDictionary方法: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html#//apple_ref/occ/instm/NSDictionary/writeToFile:atomically

答案 3 :(得分:0)

NSDictionary有一个writeToFile:方法,可以为你完成。

NSDicationary writeToFile:Atomically:

答案 4 :(得分:0)

使用NSUserDefault并将数据保存在数组

Here you can use this in anyway in your application for store value of NSUserDefaults.

// ---保存

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// saving an NSString
[prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];  
// saving an NSInteger
[prefs setInteger:42 forKey:@"integerKey"];
// saving a Double
[prefs setDouble:3.1415 forKey:@"doubleKey"];
// saving a Float
[prefs setFloat:1.2345678 forKey:@"floatKey"];
// This is suggested to synch prefs, but is not needed (I didn't put it in my tut)
[prefs synchronize];

在这里,您可以在应用程序中使用它来获取NSUserDefaults的值。

// ---检索

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// getting an NSString
NSString *myString = [prefs stringForKey:@"keyToLookupString"];
// getting an NSInteger
NSInteger myInt = [prefs integerForKey:@"integerKey"];
// getting an Float
float myFloat = [prefs floatForKey:@"floatKey"];

谢谢&干杯..

答案 5 :(得分:0)

看起来可能会有更多数据,因此最好的方法是使用核心数据来处理这种情况。

您可以查看一些有关如何使用核心数据的教程 - Link1Link2

使用NSUserDefault和文件系统上的核心数据是有好处的,因为它们会立即加载所有数据,并且您可能在性能方面遇到一些问题。

您还可以查看以下链接,这些链接将说明您用于存储数据的不同机制的效果 - PerformanceLinks1 PerformanceLinks2

答案 6 :(得分:0)

试试这个

NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:

                                       @"audio.caf",@"pictureAudioKey",
                                       @"audio.m4a",@"englishAudioKey",
                                       @"audio2.m4a",@"spanishAudioKey",
                                       @"audio3.m4a",@"frenchAudioKey",
                                       @"audio4.m4a",@"germanAudioKey",
                                       @"audio5.m4a",@"italianAudioKey",
                                       @"audio6.m4a",@"chineseAudioKey",
                                       @"image.jpg",@"photoimagekey",
                                       @"name.txt", @"identity", 
                                       @"imagename.txt",@"numberkey",nil];

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [documentPaths objectAtIndex:0];
    NSString *dictionaryPath = [documentsDirectory stringByAppendingPathComponent:[[self imageNameTextField]text]];
    dictionaryPath =[dictionaryPath stringByAppendingFormat:@"dicitonary" ] ;
    NSDictionary *savedDictionary = dictionary;


    NSLog(@"The Save file is:%@", savedDictionary);

    [savedDictionary writeToFile:dictionaryPath atomically:YES];