如何在NSUserDefault中存儲(chǔ)自定義對(duì)象好吧,所以我已經(jīng)做了一些周旋,我意識(shí)到我的問(wèn)題,但我不知道如何解決它。我做了一個(gè)自定義類(lèi)來(lái)保存一些數(shù)據(jù)。我為這個(gè)類(lèi)創(chuàng)建對(duì)象,并且需要它們?cè)跁?huì)話(huà)之間持續(xù)。在我把所有信息都放進(jìn)去之前NSUserDefaults但這不管用。-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<Player: 0x3b0cc90>' of class 'Player'.當(dāng)我將自定義類(lèi)“Player”放入NSUserDefaults..顯然,我已經(jīng)讀過(guò)了NSUserDefaults只存儲(chǔ)某些類(lèi)型的信息。所以我如何讓我的對(duì)象NSUSerDefaults?我讀到應(yīng)該有一種方法來(lái)“編碼”我的自定義對(duì)象,然后把它放進(jìn)去,但是我不知道如何實(shí)現(xiàn)它,幫助是非常感謝的!謝謝!*編輯*好的,所以我使用了下面給出的代碼(謝謝!),但是我仍然有一些問(wèn)題?;旧?,代碼現(xiàn)在崩潰了,我不知道為什么,因?yàn)樗粫?huì)產(chǎn)生任何錯(cuò)誤。也許我錯(cuò)過(guò)了一些基本的東西,我只是太累了,但我們會(huì)看到。以下是我的自定義類(lèi)“Player”的實(shí)現(xiàn):@interface Player : NSObject {
NSString *name;
NSNumber *life;
//Log of player's life}//Getting functions, return the info- (NSString *)name;- (int)life;- (id)init;//These are the setters-
(void)setName:(NSString *)input; //string- (void)setLife:(NSNumber *)input; //number @end實(shí)施文件:#import "Player.h"@implementation Player- (id)init {
if (self = [super init]) {
[self setName:@"Player Name"];
[self setLife:[NSNumber numberWithInt:20]];
[self setPsnCounters:[NSNumber numberWithInt:0]];
}
return self;}- (NSString *)name {return name;}- (int)life {return [life intValue];}- (void)setName:(NSString *)input {
[input retain];
if (name != nil) {
[name release];
}
name = input;}- (void)setLife:(NSNumber *)input {
[input retain];
if (life != nil) {
[life release];
}
life = input;}/* This code has been added to support encoding and decoding my objecst */-(void)encodeWithCoder:(NSCoder *)encoder{
//Encode the properties of the object
[encoder encodeObject:self.name forKey:@"name"];
[encoder encodeObject:self.life forKey:@"life"];}-(id)initWithCoder:(NSCoder *)decoder{
self = [super init];
if ( self != nil )
{
//decode the properties
self.name = [decoder decodeObjectForKey:@"name"];
self.life = [decoder decodeObjectForKey:@"life"];
}抱歉這么多密碼。只是想幫忙?;旧希搼?yīng)用程序?qū)?dòng),然后立即崩潰。我已經(jīng)把它縮小到了應(yīng)用程序的加密部分,那是它崩潰的地方,所以我做了一些錯(cuò)誤的事情,但我不確定是什么。再次感謝您的幫助,謝謝!(我還沒(méi)來(lái)得及解密,因?yàn)槲疫€沒(méi)有開(kāi)始加密。)
3 回答

慕的地6264312
TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
- (void)encodeWithCoder:(NSCoder *)encoder { //Encode properties, other class variables, etc [encoder encodeObject:self.question forKey:@"question"]; [encoder encodeObject:self.categoryName forKey:@"category"]; [encoder encodeObject:self.subCategoryName forKey:@"subcategory"];}- (id)initWithCoder:(NSCoder *)decoder { if((self = [super init])) { //decode properties, other class vars self.question = [decoder decodeObjectForKey:@"question"]; self.categoryName = [decoder decodeObjectForKey:@"category"]; self.subCategoryName = [decoder decodeObjectForKey:@"subcategory"]; } return self;}
NSUserDefaults
:
- (void)saveCustomObject:(MyObject *)object key:(NSString *)key { NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:encodedObject forKey:key]; [defaults synchronize];}- (MyObject *)loadCustomObjectWithKey:(NSString *)key { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSData *encodedObject = [defaults objectForKey:key]; MyObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject]; return object;}
- 3 回答
- 0 關(guān)注
- 751 瀏覽
添加回答
舉報(bào)
0/150
提交
取消