首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自建类的NSUserDefaults

自建类的NSUserDefaults
EN

Stack Overflow用户
提问于 2011-05-14 04:20:44
回答 1查看 160关注 0票数 0

我在一个通常非常简单的任务中遇到了一个问题,我想创建一个包含一个整数、一个NSString和一个NSDate的自定义类。然而,在我的示例中,我只使用NSString来显示我在存储对象时遇到的问题。

这是我的类头:#import

代码语言:javascript
复制
@interface MyClass : NSObject <NSCoding> {
    NSString * myString;
}
@property (retain) NSString * myString;
@end

还有我的身体:

代码语言:javascript
复制
#import "MyClass.h"

@implementation MyClass
@synthesize myString;

- (id)initWithCoder:(NSCoder *)coder {
    self = [super init];
    if (self) {
        myString = [coder decodeObjectForKey:@"myString"];
    }
    return self;
}
- (id)init {
    self = [super init];
    if (self) {
        myString = @"Hi";
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject: myString forKey:@"myString"];
}

- (void)dealloc {
    myString = nil;
    [super dealloc];
}
@end

我的ViewController包含两个名为Create和Read的按钮,以及一个名为UILabel的标签。

代码语言:javascript
复制
#import <UIKit/UIKit.h>
@interface UserDefaultsTestViewController : UIViewController {

    IBOutlet UILabel *label;
}
- (IBAction)pushCreate;
- (IBAction)pushLoad;
@end

我将只展示我在这里编辑过的函数:

代码语言:javascript
复制
#import "UserDefaultsTestViewController.h"
#import "MyClass.h"
- (IBAction)pushCreate {
    MyClass * myClass = [[MyClass alloc] init];
    NSData * data = [NSKeyedArchiver archivedDataWithRootObject:myClass];
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:data forKey:@"Test"];
    [myClass release];
}

- (IBAction)pushLoad {
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    NSData * atchive = [defaults objectForKey:@"Test"];
    MyClass * myClass = [NSKeyedUnarchiver unarchiveObjectWithData:atchive];
    label.text = myClass.myString;
}

但是,如果我运行我的代码,我要么得到一个EXC_BAD_ACCESS错误,要么它在第一次正确地显示它,并在第二次执行时崩溃,同样是同样的错误。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-14 04:34:04

您想要做的是:

代码语言:javascript
复制
self.myString = @"Hi";

或者:

代码语言:javascript
复制
myString = @"Hi";
[myString retain];

同样,您的dealloc应该具有:

代码语言:javascript
复制
self.myString = nil;

代码语言:javascript
复制
[myString release];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5997322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档