Actionscript 3 保存加载错误1010共享对象为3的数组对象

Actionscript 3 保存加载错误1010共享对象为3的数组对象,actionscript-3,save,shared-objects,Actionscript 3,Save,Shared Objects,我想不出这个,也许你们能帮我 在本例中,我以填充对象的数组形式存储一些数据 在我的主要课程中,我有以下代码: deckSprite.savedData = SharedObject.getLocal("cardsdata"); deckSprite.savedData.data.savedArray = deckSprite.deckArr; deckSprite.savedData.flush(); trace(deckSprite.savedData.data.savedArray); 跟

我想不出这个,也许你们能帮我

在本例中,我以填充对象的数组形式存储一些数据

在我的主要课程中,我有以下代码:

deckSprite.savedData = SharedObject.getLocal("cardsdata");
deckSprite.savedData.data.savedArray = deckSprite.deckArr;
deckSprite.savedData.flush();
trace(deckSprite.savedData.data.savedArray);
跟踪将输出类似于[object card1、object card2、object card3]的内容

现在在一个名为“deckSprite”的静态类中,我有:

savedData = sharedObject.getLocal("cardsdata");
if (savedData.data.savedArray == undefined)
{
trace("no save yet");
}
{
else
{
trace("save loaded");
deckArr = savedData.data.savedArray;
trace(savedData.data.savedArray);
现在我的跟踪数据只显示“,”(不知怎么的,卡不见了)

现在,在我得到保存的数据后,我重新启动我的应用程序,每当他尝试访问deckArr时,它就会崩溃,给我一个错误“一个术语没有定义,没有属性”


当我保存阵列时,它如何可能保存阵列中的所有卡,当我重新启动应用程序时,它突然只有“,”但卡不见了?

在AS3中序列化对象时,您必须使用包
flash.net中的
registerClassAlias()
注册它们的类。所以你得打个电话

registerClassAlias('com.example.deck', Deck)
在进行任何保存或加载之前,在程序中输入

请参阅


注意:正如@badfeelingabout在评论中指出的,您必须在
组中注册所有引用的类,即如果您的组看起来像这样:

class Deck {
    var firstCard:Card;
    var type:DeckType;
}
var deck1:Deck = new Deck();
var deck2:Deck = new Deck();
var deckArr:Array = new Array(deck1, deck2);
var deckSprite:DeckSprite = new DeckSprite()

deckSprite.setDeckArr(deckArr);
registerClassAlias('com.example.deck', Deck);
deckSprite.savedData = SharedObject.getLocal("cardsdata");
deckSprite.savedData.data.savedArray = deckSprite.deckArr;
deckSprite.savedData.flush();
trace(deckSprite.savedData.data.savedArray);
要将
Deck
保存到
SharedObject
中,您必须调用

registerClassAlias('com.example.deck', Deck);
registerClassAlias('com.example.card', Card);
registerClassAlias('com.example.decktype', DeckType);
在完成任何保存/加载之前


编辑

一切都取决于数组的内容 如果我假设,您的deckSprite声明如下:

class Deck {
    var firstCard:Card;
    var type:DeckType;
}
var deck1:Deck = new Deck();
var deck2:Deck = new Deck();
var deckArr:Array = new Array(deck1, deck2);
var deckSprite:DeckSprite = new DeckSprite()

deckSprite.setDeckArr(deckArr);
registerClassAlias('com.example.deck', Deck);
deckSprite.savedData = SharedObject.getLocal("cardsdata");
deckSprite.savedData.data.savedArray = deckSprite.deckArr;
deckSprite.savedData.flush();
trace(deckSprite.savedData.data.savedArray);
然后,在将
deckArray
添加到
SharedObject
之前,必须调用
registerClassAlias()
。Sou您的保存代码如下所示:

class Deck {
    var firstCard:Card;
    var type:DeckType;
}
var deck1:Deck = new Deck();
var deck2:Deck = new Deck();
var deckArr:Array = new Array(deck1, deck2);
var deckSprite:DeckSprite = new DeckSprite()

deckSprite.setDeckArr(deckArr);
registerClassAlias('com.example.deck', Deck);
deckSprite.savedData = SharedObject.getLocal("cardsdata");
deckSprite.savedData.data.savedArray = deckSprite.deckArr;
deckSprite.savedData.flush();
trace(deckSprite.savedData.data.savedArray);
(将
替换为用于表示组的实际类)

同样,在进行任何加载之前,必须调用第一行


当然,最好不要重复,所以应该调用
registerClassAlias('com.example.deck',deck)仅在程序中出现一次,因此,例如,在主类中的某些
init()
方法中,如果您有类似的内容。

您能给我一个示例吗,似乎无法正确执行它可能也值得指出,您需要注册嵌套在数组中的每个非基本类,因此,您的
card1
card2
card3
等,以及这些卡类中可能存在的任何非原语(如果有)。尽管如此,在共享对象中存储显示对象通常不会以这种方式工作。我想看看这个问题:@Denis看到我更新的答案,也看到关于他的评论的负面评论,他是绝对正确的,我会用这个信息更新答案。你可能会发现这个问题很有用: