我在一个非常简单的任务中遇到问题,我想创建一个包含整数,NSString和NSDate的自定义类。但是,在我的示例中,我只使用NSString来显示存储对象时的问题。
这是我的班级标题: #import
@interface MyClass : NSObject <NSCoding> {
NSString * myString;
}
@property (retain) NSString * myString;
@end
和我的身体:
#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的标签。
#import <UIKit/UIKit.h>
@interface UserDefaultsTestViewController : UIViewController {
IBOutlet UILabel *label;
}
- (IBAction)pushCreate;
- (IBAction)pushLoad;
@end
我只会展示我在这里编辑的功能:
#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错误或第一次正确显示它并在第二次执行时崩溃,再次出现相同的错误。 我做错了什么?
答案 0 :(得分:1)
你想这样做:
self.myString = @"Hi";
或者:
myString = @"Hi";
[myString retain];
同样,你的dealloc应该有:
self.myString = nil;
或
[myString release];