0
대개 매우 간단한 퀘스트에서 문제가 발생했습니다. 정수, NSString 및 NSDate를 포함하는 사용자 정의 클래스를 만들고 싶습니다. 그러나, 내 예제에서는 개체를 저장할 때 내 문제를 표시하는 경우에만 NSString을 사용합니다.자체 생성 클래스에 대한 NSUserDefaults
이 내 클래스 헤더입니다 : # 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가 아니라 UILabel의 레이블 불렀다 작성 및 읽기라는 두 개의 버튼이 있습니다.
#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 오류 중 하나를 얻거나 올바르게 처음과 충돌을 표시합니다 :
#import <UIKit/UIKit.h>
@interface UserDefaultsTestViewController : UIViewController {
IBOutlet UILabel *label;
}
- (IBAction)pushCreate;
- (IBAction)pushLoad;
@end
난 단지 내가 여기에 편집 한 기능이 표시됩니다 그것을 다시 할 때 같은 오류가 발생합니다. 내가 뭘 잘못하고 있니?
self.myString = @"Hi";
또는 :
내가 네브라스카 내 문자열에 어떤 메모리도 할당하지 않은 채로 릴리스 했습니까? 내가 명시 적으로 할당되지 않은 NSStrings autoreleased –
@ 데이비드 생각, 당신은 개체를 할당하지 않았지만 당신이 그것에 대한 참조를 잡고있어 때문에 당신은 정확하게 필요합니다. 그리고 객체를 유지 한 후에는 객체를 끝내야합니다. 나쁜 포인터를 가지고 있기 때문에 EXC_BAD_ACCESS가 표시됩니다. 즉, 코 바로 아래에서 할당 해제되는 개체에 대한 포인터입니다. – Caleb
myString = @ "Hi"와 self.myString = @ "Hi"의 차이점을 알지 못했습니다. 고마워. –