将多维NSArray保存到NSUserDefaults的最佳实践

时间:2013-08-20 12:14:04

标签: objective-c nsarray nsuserdefaults

在Obj-C中我试图将数组保存到NSUserDefaults我收到错误。我想这是因为阵列是多维的,但如何解决这个问题的最佳方法是什么?我应该将整个对象编码/解码为字符串,还是应该以某种方式调整我的对象?

以下是警告信息。我用“...”替换了一些匹配对象,以使帖子不长100英里。

提前致谢!

*** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '(
        {
        items =         (
                        {
                awayName = Celtic;
                awayScore = 0;
                channel = TV3Sport1;
                dateEnd = 1377018000;
                dateStart = 1377010500;
                description = "Playoff til Champions League, 1. kamp.";
                hash = 05ec41bd5cb91fe559349391c007994d;
                homeName = "Shakhter Karagandy";
                homeScore = 0;
                leagueTitle = "Champions League (kval)";
                matchProgress = "";
                matchStart = 1377010800;
                stream = "";
            },
                        {
                awayName = "Real Sociedad";
                awayScore = 0;
                channel = TV3Sport1;
                dateEnd = 1377031500;
                dateStart = 1377023400;
                description = "Playoff til Champions League, 1. kamp.";
                hash = be7a7e4763038c6991ba9f6cddfce871;
                homeName = Lyon;
                homeScore = 0;
                leagueTitle = "Champions League (kval)";
                matchProgress = "";
                matchStart = 1377024300;
                stream = "";
            }
        );
        unix = 1376949600;
    },
        {
        items =         (
                        {...);
        unix = 1377036000;
    },
        {
        items =         (...);
        unix = 1377122400;
    },
        {
        items =         (...);
        unix = 1377208800;
    },
        {
        items =         (...);
        unix = 1377295200;
    },
        {
        items =         (...);
        unix = 1377381600;
    },
        {
        items =         (...);
        unix = 1377468000;
    },
        {
        items =         (...);
        unix = 1377554400;
    }
)' of class '__NSCFArray'.  Note that dictionaries and arrays in property lists must also contain only property values.

2 个答案:

答案 0 :(得分:1)

问题不在于数组是多维的(或必然是嵌套)。问题是完整结构只能包含NSDataNSStringNSNumberNSDateNSArrayNSDictionary的实例 - 以及在某个地方,你有一个其他类的实例。您需要删除该类或将其转换为允许的类型之一。

您可能还想考虑将大量数据存储到用户默认值中是否真的是您想要做的...

答案 1 :(得分:1)

你的模型看起来有点沉重和复杂。所以我建议你学习iOS中的数据持久性。在应用启动之间保存数据的选项很少:

  • NSUserDefaults
  • NSCoding
  • 核心数据
  • 以plist存储

每种策略都有自己的优势,我不能给你一个灵丹妙药。这取决于你的模型。

相关问题