gpt4 book ai didi

objective-c - 使用 NSCoding 将类保存到 objc 中的 NSUserDefaults

转载 作者:行者123 更新时间:2023-11-29 13:31:15 25 4
gpt4 key购买 nike

我有点困惑我应该如何进行这里,说这是我的课

@interface PlayerStats : NSObject <NSCoding>
{
NSMutableDictionary *gameStats;
NSUserDefaults *prefs;

GamePlayStats *_gamePlayStats;

GameStats *_openGameStats;
GameStats *_duelGameStats;
GameStats *_challengeGameStats;

float _averagePanelsRevealed;
float _averageGuessSpeed;

int _totalCoinsEarned;
int _totalTokensEarned;

int _playerLevel;
}

现在,当我想保存类时,我希望这样做,因为只保存类似乎更明智,当我取回它时,我可以调用它的变量,尽管它是方法等。

- (void)encodeWithCoder:(NSCoder *)encoder 
{
[encoder encodeObject:self forKey:@"playerStats"];
}

但是我看到的所有示例都要求您单独加载所有变量,因此它看起来应该更像

- (void)encodeWithCoder:(NSCoder *)encoder 
{
[encoder encodeObject:self.gamePlayStats forKey:@"gamplaystats"];
[encoder encodeObject:self._openGameStats forKey:@"openGameStats"];
etc..
}

为什么会这样?

干杯

最佳答案

函数 - (void)encodeWithCoder:(NSCoder *)encoder 要求您决定要将哪个变量保存到编码器。信息编码器为你生成的是类信息。在 [encoder encodeObject:aObject forKey:@"key"] 中,它会尝试调用 [aObject encodeWithCoder:encoder]。我认为如果写 encodeWithCoder: 就像

- (void)encodeWithCoder:(NSCoder *)encoder 
{
[encoder encodeObject:self forKey:@"playerStats"];
}

除了你的类名和类类型什么都不写,因为苹果在编码器中启用了引用检查,它不会对同一个对象进行两次编码。否则同一对象上的 encodeWithCoder 将被调用多次。

因此,您必须将必要的属性/变量编码到编码器中以保存类的数据。

关于objective-c - 使用 NSCoding 将类保存到 objc 中的 NSUserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11825671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com