相关疑难解决方法(0)

如何在NSUserDefaults中存储自定义对象

好吧,所以我一直在做一些戳,我意识到我的问题,但我不知道如何解决它.我已经创建了一个自定义类来保存一些数据.我为这个类制作了对象,我需要它们在会话之间持续.在我将所有信息都放入之前NSUserDefaults,但这不起作用.

-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<Player: 0x3b0cc90>' of class 'Player'.
Run Code Online (Sandbox Code Playgroud)

这是我将自定义类"Player"放入的错误消息NSUserDefaults.现在,我读过,显然NSUserDefaults只存储了某些类型的信息.那么我如何让我的对象进入NSUSerDefaults

我读到应该有一种方法来"编码"我的自定义对象,然后把它放进去,但我不知道如何实现它,帮助将不胜感激!谢谢!

****编辑****

好吧,所以我使用下面给出的代码(谢谢!),但我仍然有一些问题.基本上,代码崩溃了,我不知道为什么,因为它没有给出任何错误.也许我错过了一些基本的东西,我太累了,但我们会看到.这是我的Custom类"Player"的实现:

@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
Run Code Online (Sandbox Code Playgroud)

实施档案:

#import "Player.h"
@implementation Player
- (id)init {
    if (self = [super init]) {
        [self setName:@"Player …
Run Code Online (Sandbox Code Playgroud)

iphone encoding objective-c nsuserdefaults ios

266
推荐指数
7
解决办法
13万
查看次数

在NSUserDefaults中的NSMutableArray中存储自定义对象

我最近一直试图将我的iPhone应用程序的搜索结果存储在NSUserDefaults集合中.我也使用它来成功保存用户注册信息,但由于某种原因,尝试存储我的自定义位置类的NSMutableArray总是返回空.

我尝试将NSMutableArray转换为NSData元素,但是我得到了相同的结果(可以在iPhone上使用NSUserDefaults保存整数数组吗?)

我试过的代码示例是:

保存:

[prefs setObject:results forKey:@"lastResults"];
[prefs synchronize];
Run Code Online (Sandbox Code Playgroud)

要么

NSData *data = [NSData dataWithBytes:&results length:sizeof(results)];
[prefs setObject:data forKey:@"lastResults"];
Run Code Online (Sandbox Code Playgroud)

要么

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:results];
[prefs setObject:data forKey:@"lastResults"];
Run Code Online (Sandbox Code Playgroud)

加载:

lastResults = (NSMutableArray *)[prefs objectForKey:@"lastResults"];
Run Code Online (Sandbox Code Playgroud)

要么

NSData *data = [prefs objectForKey:@"lastResults"];
memcpy(&lastResults, data.bytes, data.length);  
Run Code Online (Sandbox Code Playgroud)

要么

NSData *data = [prefs objectForKey:@"lastResults"];
lastResults = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Run Code Online (Sandbox Code Playgroud)

按照下面的建议后,我也在我的对象中实现了NSCoder(忽略过度使用NSString的临时性):

#import "Location.h"


@implementation Location

@synthesize locationId;
@synthesize companyName;
@synthesize addressLine1;
@synthesize addressLine2;
@synthesize city;
@synthesize postcode;
@synthesize telephoneNumber;
@synthesize description;
@synthesize rating;
@synthesize priceGuide; …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch

101
推荐指数
2
解决办法
7万
查看次数