我在一个通常非常简单的任务中遇到了一个问题,我想创建一个包含一个整数、一个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错误,要么它在第一次正确地显示它,并在第二次执行时崩溃,同样是同样的错误。我做错了什么?
发布于 2011-05-14 04:34:04
您想要做的是:
self.myString = @"Hi";或者:
myString = @"Hi";
[myString retain];同样,您的dealloc应该具有:
self.myString = nil;或
[myString release];https://stackoverflow.com/questions/5997322
复制相似问题